2010-03-09 1 views
0

Я пытаюсь добавить фильтр функциональности, которая отправляет GET запроса на ту же страницу, чтобы фильтровать записи в моей таблице.asp.net MVC ActionMethod вызывая исключения нулевых по параметру

Проблема, с которой я сталкиваюсь, заключается в том, что текстовое поле жалуется на нулевую ссылку на объект, когда параметр не передан. Например, когда человек сначала просматривает страницу, URL-адрес равен '/ mycontroller/myaction /'. Затем, когда они применяют фильтр и отправить форму оно должно быть что-то вроде "mycontroller/MyAction? Имя = ...

Очевидно, что проблема возникает с момента, когда значение имя не передается (нуль), то все еще пытаясь привязываться к текстовому поле «имя». Какие-либо предложения о том, что я должен делать по этой проблеме?

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

+0

@David Liddle - вы можете это сделать полностью - до тех пор, пока они принимают разные параметры. Вы не можете определить два с одной и той же сигнатурой, но очень часто бывает два метода: один принимает модель и не принимает никаких параметров. – Fenton

+0

Единственный способ сделать это - предоставить другое имя ActionName в качестве атрибута. Но тогда вам все равно придется использовать разные ссылки - http://stackoverflow.com/questions/436866/can-you-overload-controller-methods-in-asp-net-mvc – David