2011-08-04 32 views
1

我是相當新的ASP.NET和C#,我有我的路由的一些問題。希望有人能幫助我。C#ASP.NET MVC 2基本的路由

用戶應該給出3個參數(string,bool,bool)。 所以,我有我的索引頁上的一個小表格:

<% using (Html.BeginForm("search", "Home")) { %> 
     <label >Name: </label><br /> 
     <input type="text" id='ml' name='ml' /><br /> 
     <label >Sort members alphabethic? </label> <input type="checkbox" id='sortalph' name='sortalph' /><br /> 
     <label >Number the list? </label><input type="checkbox" id='number' name='number' /><br /> 
     <input type="submit" value='Submit'/> 
    <% } %> 

Global.asax.cs設置是這樣的:

routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}", // URL with parameters 
      new { controller = "Home", action = "Index"} // Parameter defaults 
     ); 
     routes.MapRoute(
     "Search", // Route name 
     "{controller}/{action}/{ml}/{sortalph}/{number}", // URL with parameters 
     new { controller = "Docent", action = "Search" } // Parameter defaults 
    ); 

Search方法在我HomeController開始看起來是這樣的:

public ActionResult Search(string ml, bool? sortalph, bool? number) 
{ 
    if (sortalph == null) 
    { 
     sortalph = false; 
    } 
    if (number == null) 
    { 
     number = false; 
    } 

當調試sortalphnumber總是null。我不知道爲什麼。

+0

只是好奇:你爲什麼使用空值? –

+0

@丹,我用nullables太頻繁,這樣我就可以缺少一個乾淨的URL /後與參數之間區分(因此使用默認,可能是「真」),當它實際上是通過故意「假」或' 0'而無需諮詢價值提供商 –

回答

1

你並不需要添加一種特殊的路由這些,因爲他們只是要通過瀏覽器被添加到查詢字符串,或進入後身體如果表單後,提交表單時。

因此,如果瀏覽器做了GET,那麼它實際上形成URL /home/search?ml=[whatever]&sortalph=[whatever]&number=[whatever]。 MVC自動將參數按名稱映射到查詢字符串中的值。

如果您註釋掉路線你會發現,它都將開始工作。

1

問題是嚴格相關的兩個因素:在操作方法

  • 你的布爾參數不應該爲空。使用bool而不是bool?
  • 您在html上的複選框應該有value="true",因此當它們被選中時,會發送正確的值並且屬性會得到正確的值。

除此之外,您可以使用html helper方法而不是純html來創建表單。您的html有許多缺陷,如缺少for屬性的標籤等。

此外,由於它是一種搜索表單,因此您應該使用HTTP GET方法使搜索結果成爲可索引和可​​收藏的,但您並未指定它並且BeginForm的默認超載將使用HTTP POST方法呈現表單標記。

+0

好的,謝謝你的幫助,並給出一些提示^^ – Reinard