2010-03-09 63 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