2016-02-13 27 views
1

我必須下面的代碼來訪問值從Route.Values爲什麼RoutData.Values [「txtName」]會引發null參考錯誤?

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(); 

我的RouteMap是

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

因爲價值他們被添加爲查詢字符串值,而不是路由值 - 使用'var p1 = ViewContext.HttpContext.Request.QueryString.Get(「txtName」);' –

+0

@StephenMuecke好吧我困惑,當我設置RoutMap它將這些值添加到ViewContext .RouteData.Values收集權限? – zeelong

+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"]

+0

嗯...我如何將我的文本框值添加到表單頭中的routeData對象的txtName屬性? – zeelong

+0

你不能這樣做(除非你在提交之前使用javascript來改變表單元素的''action''屬性,這簡直太瘋狂了) - 這僅僅是一個例子,告訴你它唯一可能使用的服務器端代碼。 –

+0

歡呼隊友,但一個快速驗證,在POST方法中,查詢字符串被隱藏並添加到郵件正文,所以即使在POST方法中我可以使用上面的兩種技術? – zeelong

相關問題