我在文本字段中有一个简单的用户输入RSS提要的地址。如果字段为空,我不会采取行动,这是我的标记:
<%=Html.ValidationSummary() %>
<table>
<tr>
<td>
Feed Url:
</td>
<td>
<%=Html.TextBox("url", null, new {@style="width:300px"}) %>
</td>
</tr></table>
我的控制器也非常简单:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult AddFeed(FormCollection collection)
{
string url = collection.Get("url");
string roles = collection.Get("Roles");
if (string.IsNullOrEmpty(url))
{
ModelState.AddModelError("url", "Please provide a propre feed url");
}
if (string.IsNullOrEmpty(roles))
{
ModelState.AddModelError("Roles", "Please select a valid role");
}
if (ModelState.IsValid)
{
Session["url"] = url;
Session["Roles"] = roles;
return RedirectToAction("ValidateFeed");
}
else
{
return View();
}
}
当它失败时,它重新加载视图并在它呈现我的文本框的行中发出异常,说明存在空指针异常。这真的让我烦恼,它应该是如此简单......但仍然在挣扎
/ H4mm3r
编辑请忽略Roles元素我的下拉列表,但为了简单起见将其从标记中删除
答案 0 :(得分:0)
我认为你不能使用ModelSate,如果你没有做类似的事情:
UpdateModel(collection);
或
TryUpdateModel(collection);
或参数绑定
public ActionResult AddFeed(YourModelType collection)
因为Modelstate与任何模型都没有关联。
正如MSDN参考文献所述:
ModelState类
封装模型的状态 绑定到一个属性 动作方法论证,或者 论证本身。
答案 1 :(得分:0)
使用HTML帮助程序时,您可能无法使用null。请在您的表单中尝试此操作:
<%= Html.TextBox("url", String.Empty, new {@style="width:300px"}) %>
我没有测试过,但这是我尝试的第一件事,给出错误信息。