为什么RoutData.Values [“txtName”]抛出一个null引用错误?

时间:2016-02-13 12:33:53

标签: asp.net-mvc asp.net-mvc-4

我必须使用以下代码才能访问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" }
           );
        }

为什么该行抛出异常以及如何解决这个问题?

1 个答案:

答案 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"]

访问该值