1

我创建了一个用作局部视图的表单。

我在“保存”操作处放置了一个断点,当我单击提交按钮时,它会验证数据,但从未到达该操作,而是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 。

4

5 回答 5

2

我在RouteConfig.cs文件中发现了问题。

有一个错误的映射混淆了路由,我猜它使用该Index操作作为默认操作,而不是由于设置错误而未找到的特定操作。

于 2013-04-30T05:31:20.267 回答
0

尝试在方法中指定Actionand :ControllerBeginForm

Html.BeginForm("Save", "YourController", FormMethod.Post) 
于 2013-04-24T13:46:21.540 回答
0

您是否使用不显眼的验证?如果是这样,验证发生在客户端,假设您的模型指定 Title 是必需的,根据您的代码看起来很可能。

如果您希望无论验证状态如何都调用您的操作,您将需要在您的操作中进行验证,而不是通过不显眼的客户端验证。

于 2013-04-24T14:25:40.407 回答
0

我认为这是由于 ValidateAntiForgeryToken 可能是您的操作方法未与您的表单请求映射删除此标签或根据本教程中的内容执行此操作:

并看到这个:

于 2013-04-29T15:55:37.927 回答
0

[Authorize]如果标签位于控制器的顶部,也会发生错误。如果用户未登录,[AllowAnonymous]则不会加载未标记的操作。

于 2018-03-08T18:57:47.610 回答