我必须使用以下代码才能访问Route.Values
带有输入控件和值的index.cshtml
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@using( Html.BeginForm("Create", "Concepts", FormMethod.Get, null ) )
{
@Html.Hidden("ghia", new { d="sssd343433333355555%%%%%%%" })
<input type="text" name="txtName" value="dummydata1" />
<input type="text" name="txtsdsdfs&&&&33adada" value="dummydata2" />
<input type="submit" value="New" />
}
尝试访问这些值时,Create.cshtml
中的
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@{
//Routeda
var p1 = ViewContext.RouteData.Values["txtName"].ToString;
}
<p>@p1</p>
以上内容在行中引发Null Reference
异常:
var p1 = ViewContext.RouteData.Values["txtName"].ToString();
我的路线图是
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "test1",
url: "{controller}/{action}/{txtName}/{txtsdsdfs&&&&33adada}",
defaults: new { controller = "Concepts", action = "Create" }
);
}
为什么该行抛出异常以及如何解决这个问题?
答案 0 :(得分:2)
当您提交表单时,表单控件的名称/值对将添加为查询字符串值,而不是路由值,因为您的浏览器不了解您的路由。要访问,您可以使用
var p1 = ViewContext.HttpContext.Request.QueryString.Get("txtName");
添加路由值的唯一方法是使用服务器端代码,例如
@using( Html.BeginForm("Create", "Concepts", new { txtName = "someValue }, FormMethod.Get, null ))
允许您使用ViewContext.RouteData.Values["txtName"]