【发布时间】:2013-04-24 13:43:20
【问题描述】:
我创建了一个用作局部视图的表单。
我在“保存”操作处放置了一个断点,当我单击提交按钮时,它会验证数据,但从未到达该操作,而是多次到达Index 操作!
代码如下:
@model Models.Category
@using (Html.BeginForm("Save", "Categories", FormMethod.Post))
{
@Html.AntiForgeryToken()
<fieldset>
<legend>Category</legend>
@Html.HiddenFor(model => model.CategoryId)
<p>@((Model.CategoryId > 0 ? "Edit" : "New") + " category")</p>
<div class="editor-label">
@Html.LabelFor(model => Model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => Model.Title)
@Html.ValidationMessageFor(model => Model.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => Model.Description)
</div>
<div class="editor-field">
@Html.EditorFor(model => Model.Description)
@Html.ValidationMessageFor(model => Model.Description)
</div>
<p>
<input type="submit" value="Save">
@Html.ValidationSummary(true)
</p>
</fieldset>
}
行动:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Save(Category category)
{
throw new Exception("Exception has been thrown!");
}
这是我点击“保存”时发生的屏幕截图,显示验证错误,但未调用 Save 操作,也未引发异常。
而是触发了Index 操作!
我还可以检查什么来追踪问题?谁将页面重定向到索引???
可以看到输出 HTML here。
【问题讨论】:
-
奇怪,你的控制器肯定叫
Categories是吗?当它通过验证时,它是否仍然提交给Index? -
@Shinny 你能发布打开
form标签的输出HTML(来自浏览器的开发工具)吗? -
@mattytommo jsfiddle.net/gRjeT
-
看起来不错,在您的保存方法中有重定向到索引吗?能否贴出
Save方法的代码(实际正文) -
会不会是您的身份验证 cookie 已过期,因此它正在重定向到您的主页索引页面?
标签: c# asp.net-mvc action forms http-post