C# ASP.NET MVC表单提交到索引,而不是提交到正确的操作

C# ASP.NET MVC表单提交到索引,而不是提交到正确的操作,c#,asp.net-mvc,action,forms,http-post,C#,Asp.net Mvc,Action,Forms,Http Post,我用板条箱装了一张用作局部视图的表格 我在“保存”操作处放置了一个断点,当我单击“提交”按钮时,它会验证数据,但从未到达该操作,而是多次到达Index操作 代码如下: @model Models.Category @using (Html.BeginForm("Save", "Categories", FormMethod.Post)) { @Html.AntiForgeryToken() <fieldset> <legend>Category<

我用板条箱装了一张用作局部视图的表格

我在“保存”操作处放置了一个断点,当我单击“提交”按钮时,它会验证数据,但从未到达该操作,而是多次到达
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>
}
这里是一个屏幕截图,显示了当我点击“保存”时发生的情况,验证错误显示出来,但是没有调用
Save
操作,也没有抛出异常。
相反,将触发
索引
操作

我还可以检查什么来追踪问题?谁正在将页面重定向到索引


您可以看到输出HTML。

尝试在
BeginForm
方法中指定
操作
控制器

Html.BeginForm("Save", "YourController", FormMethod.Post) 

您是否在使用不引人注目的验证?如果是这样,验证将在客户端进行,假设您的模型指定了Title is requires,根据您的代码,这看起来很可能


如果希望调用操作而不考虑验证状态,则需要在操作中执行验证,而不是通过不引人注目的客户端验证。

我认为这是由于ValidateAntiForgeryToken可能是您的操作方法与表单请求不匹配删除此标记或根据本教程中的说明执行此操作:

还可以看到:


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


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

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

这不是问题所在,很抱歉在我的帖子中省略了
BegInformit
参数,现在已经存在了,请更新或删除您的答案。奇怪的是,您的控制器肯定被称为
Categories
是吗?当它通过验证时,它是否仍然提交到
索引
?@Shinny您可以发布打开的
表单
标记的输出HTML(来自浏览器的开发工具)吗?@mattytommo看起来不错,在您的保存方法中是否重定向到索引?您可以发布
保存
方法(实际正文)的代码吗?可能是您的身份验证cookie已过期,因此它将重定向到您的主页索引页?我禁用了验证,但没有帮助。我已将其从视图和操作中删除,保存按钮运行
索引
操作。请注意,这应该放在您的代码上:Html.BeginForm(“保存”,“类别”,FormMethod.Post)如果您想使用
保存
操作,您可以看到它在我的表单中。
Html.BeginForm("Save", "YourController", FormMethod.Post)