gpt4 book ai didi

c# - 当前对 Controller 类型 'Create' 的操作 'WeeklyTargetController' 的请求在以下操作方法 : 之间不明确

转载 作者:行者123 更新时间:2023-11-30 17:00:34 24 4
gpt4 key购买 nike

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

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

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

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

@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 不会查看方法签名来覆盖歧义,并且只能有两个创建操作。我有哪些选择?我是不是完全错了?有没有办法让过滤器表单提交路由到不同的操作名称而不是创建?请记住,这一切都在创建 View 上,之后我会回到这里。任何帮助将不胜感激,谢谢!

最佳答案

当您通过 BeginForm 方法创建表单时,您可以指定操作和 Controller 。

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

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

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

FormExtensions.BeginForm Method

关于c# - 当前对 Controller 类型 'Create' 的操作 'WeeklyTargetController' 的请求在以下操作方法 : 之间不明确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22019749/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com