2010-03-09 69 views
0

造成空例外,我正在嘗試添加過濾功能,發送GET 要求在同一個頁面中我的表中篩選記錄。asp.net MVC ActionMethod在參數

我遇到的問題是當沒有傳遞參數時,文本框投訴空對象引用。例如,當人首先查看該頁面時,網址爲'/ mycontroller/myaction /'。然後當他們申請一個過濾器並提交表單時,它應該是類似於'mycontroller/myaction?name = ...'

顯然,問題源於名稱值未被傳遞時(null)仍然試圖綁定到'名稱'文本框。關於我應該怎樣處理這個問題的任何建議?

UPDATE 我已經嘗試設置默認值屬性,但我猜想這只是針對路由值,而不是查詢字符串值的ActionResult MyAction([默認值(「」)字符串名)

//Action - /mycontroler/myaction 
ActionResult MyAction(string name) 
{ 
    ...do stuff 
} 

//View 
<div id="filter"> 
    <% Html.BeginForm("myaction", "mycontroller", FormMethod.Get); %> 
    Name: <%= Html.TextBox("name") %> 
    .... 
</div> 
<table>...my list of filtered data 

回答

0

決定ŧ o以不同的方式實現,以便將輸入框投遞到執行一些業務邏輯的不同操作方法,然後重定向回原始頁面。

POST-REDIRECT-GET

-1
//Action - /mycontroler/myaction 
ActionResult MyAction(string name) 
{ 
    if (name == null) { 
     name = string.Empty; 
    } 
    ...do stuff 
} 

或...添加過載...

//Action - /mycontroler/myaction 
ActionResult MyAction() 
{ 
    return MyAction(string.Empty); 
} 
+0

我不認爲這會工作,你無法定義ActionResults與相同的名稱,那麼它不會知道要提供的路線。 – David 2010-03-09 11:39:48

+0

@大衛利德爾 - 只要他們接受不同的參數,你完全可以做到這一點。你不能用相同的簽名來定義兩個,但是有兩種方法很常見,一種接受模型,另一種不接受參數。 – Fenton 2010-03-10 08:52:26

+0

要做到這一點的唯一方法是提供一個不同的ActionName作爲屬性。但是,那麼你必須使用不同的鏈接 - http://stackoverflow.com/questions/436866/can-you-overload-controller-methods-in-asp-net-mvc – David 2010-03-31 12:54:18