【问题标题】:MVC 4: Calling action method on dropdown list select changeMVC 4:在下拉列表选择更改上调用操作方法
【发布时间】:2014-07-16 08:49:27
【问题描述】:

我有一个下拉列表,我希望在更改选择时调用特定的操作方法。这是我的下拉列表:

@using (Html.BeginForm(null, null, FormMethod.Post, new { id = "ediFilesForm" }))
{
    var directoriesSelectList = new SelectList(Model.Directories);
    @Html.DropDownListFor(m => m.SelectedDirectory, directoriesSelectList, new {@Id = "Directories", @style = "width:Auto;height=Auto;", @size = 10, onchange = "$('#ediFilesForm').submit()", name="action:FolderChange"})

这里是动作方法:

    [HttpPost]
    [ActionName("FolderChange")]
    public ActionResult FolderChange(EdiFileModel ediFileModel)
    {
        //do your work here
        return View("Index", ediFileModel);
    }

由于某种原因,这个方法永远不会被命中,而是被这个方法命中:

    public ActionResult Index()
    {
        ...
        return View(ediFileModel);
    }

你能帮忙吗?

【问题讨论】:

  • 为什么你要传递动作和控制器为空?

标签: c# asp.net-mvc-4


【解决方案1】:

试试下面的代码:-

@using (Html.BeginForm("FolderChange", "ControllerName", FormMethod.Post, new { id = "ediFilesForm" }))
{
////your code
}

出现问题是因为您没有在 beginform 中传递足够的信息。

更多信息:-

How to write "Html.BeginForm" in Razor

【讨论】:

    【解决方案2】:

    BeginForm 方法的第一个参数是Action 名称,第二个参数是Controller。您传递的是null,因此它使用默认值。

    更改您的代码并传递您要调用的Action 的名称:

    @using (Html.BeginForm("FolderChange", "ControllerName", FormMethod.Post, new { id = "ediFilesForm" }))
    

    【讨论】:

    • 感谢您的回答。我试过了,但是它在找MyController/FolderChange,找不到,当然,因为是同一个视图,所以没有重定向。此外,使用此代码,每个表单都有一个操作,这是否意味着如果我有 5 个下拉菜单,我需要每个表单?
    • @DavidShochet 传递不带控制器后缀的控制器名称。是的,您需要为每个下拉菜单使用不同的表单,或者使用 jquery/ajax 并向操作发送请求,而不是在选择更改时提交表单。如果您不知道如何进行搜索:使用 ajax 填充下拉菜单mvc 在 google 上,你会发现很多资源
    • 谢谢,它成功了。我也可以问你一个问题吗?我在这个表单上有几个按钮,每个按钮都有自己的操作方法。它们都采用相同的形式,但工作完美。为什么他们不需要每个表格?
    猜你喜欢
    • 1970-01-01
    • 2011-09-16
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多