【问题标题】:The current request for action 'Create' on controller type 'WeeklyTargetController' is ambiguous between the following action methods:当前对控制器类型“WeeklyTargetController”的“创建”操作请求在以下操作方法之间不明确:
【发布时间】:2014-02-25 16:07:25
【问题描述】:

我在这里经常看到这个问题,但我的问题略有不同。我已经有两个开箱即用的 MVC 生成的 Create 操作,如下所示(一个是 GET,一个是 POST):

public ActionResult Create()
{
//stuff...
}

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include="WeeklyTargetId,UserId,WeekId,Hours")] WeeklyTarget weeklytarget)
{
//stuff...
}

我的问题是我正在尝试根据我添加到页面上的下拉菜单更新创建视图,该下拉菜单包含在它自己的表单中,提交时用户可以在主创建表单上过滤另一个下拉列表。这是我在 Create 视图上单独包装的表单:

@using (Html.BeginForm())
{
<p>        
    <span>
        Filter By Practice:
        @Html.DropDownList("Practice", (List<SelectListItem>) ViewBag.PracticeList, new { @onchange = "this.form.submit();"})
    </span>

</p>
}

我的理由是,当用户选择要过滤的实践时,onchange 事件将提交表单并启动我已注销的新创建操作:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(FormCollection formCollection)
{
//do the filtering stuff...
}

但是,我开始意识到 MVC 不会查看方法签名来覆盖歧义,并且只能有两个 Create 操作。我有哪些选择?我会完全错了吗?有没有办法让过滤器表单提交路由到不同的操作名称而不是创建?请记住,这一切都在“创建视图”中,之后我将返回此内容。任何帮助将不胜感激,谢谢!

【问题讨论】:

    标签: c# asp.net-mvc razor


    【解决方案1】:

    当您通过BeginForm 方法创建表单时,您可以指定动作和控制器。

    Html.BeginForm("FilterAction", "ControllerName")
    

    然后在操作中,您可以通过 ViewBag 根据 SelectList 中的任何内容过滤模型。

    更多信息可以在这里找到:

    FormExtensions.BeginForm Method

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 2012-05-26
      • 2013-07-01
      • 2015-01-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多