【问题标题】:MVC 4: Ambiguous request for actionMVC 4:模棱两可的行动请求
【发布时间】:2014-05-28 15:24:08
【问题描述】:

我有以下代码:

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

    var ediFilesSelectList = new SelectList(Model.EdiFileNames);
    @Html.DropDownListFor(m => m.SelectedEdiFile, ediFilesSelectList, new {@Id = "EdiFileNames",       
    @style = "width:Auto;", @size = 20})
}
<br/>

<form action="" method="post">
    <input type="submit" value="Send" name="action:Send" />
    <input type="submit" value="Delete" name="action:Delete" />
    <input type="submit" value="Refresh" name="action:Refresh" />
</form>

Here is a part of the controller:

    [HttpPost]
    [ActionName("FolderChange")]
    public ActionResult FolderChange(EdiFileModel ediFileModel)
    {
        ediFileModel = Load(ediFileModel.SelectedDirectory);
        return View("Index", ediFileModel);
    }
...

    [HttpPost]
    [MultipleButton(Name = "action", Argument = "Send")]
    public ActionResult Send(EdiFileModel ediFileModel)
    {
        ....
        return View("Index", ediFileModel);
    }

    [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)]
public class MultipleButtonAttribute : ActionNameSelectorAttribute
{
    public string Name { get; set; }
    public string Argument { get; set; }

    public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
    {
        var isValidName = false;
        var keyValue = string.Format("{0}:{1}", Name, Argument);
        var value = controllerContext.Controller.ValueProvider.GetValue(keyValue);

        if (value != null)
        {
            controllerContext.Controller.ControllerContext.RouteData.Values[Name] = Argument;
            isValidName = true;
        }

        return isValidName;
    }
}

当我按下任何按钮时,我会收到以下消息:

当前对控制器类型“EdiSenderController”的操作“FolderChange”的请求在以下操作方法之间不明确: System.Web.Mvc.ActionResult Send(EdiSimulatorWebSender.Models.EdiFileModel) 在类型 EdiSimulatorWebSender.Controllers.EdiSenderController System.Web.Mvc.ActionResult FolderChange(EdiSimulatorWebSender.Models.EdiFileModel) 类型为 EdiSimulatorWebSender.Controllers.EdiSenderController

你能帮我理解我的观点有什么问题吗?

谢谢。

【问题讨论】:

  • @Ehsan Sajjad 我将其添加到我的问题中。
  • 您有一个名为 FolderChange 的操作?
  • 如果两者完全相同,为什么要放入 actionmame 属性,删除此属性并尝试:[ActionName("FolderChange")]
  • 我怀疑是因为它正在检测两个同名的操作
  • @Ehsan Sajjad 我有一个名为“FolderChange”的操作。我放置这个属性是为了防止寻找视图“FolderChange”,因为它是同一个视图。

标签: asp.net-mvc-4


【解决方案1】:

确保在你的控制器上将 post 属性添加到你的 post 方法中

public ActionResult FolderChange ... for the get

[HttpPost]
public ActionResult FolderChange... for the post

【讨论】:

  • 请查看我的控制器添加到问题中。
  • 每次我看到这个错误都是因为控制器上有两个同名的方法。你有 2 个名为 FolderChange 的方法吗?
  • 不,我没有两种方法。
  • @Matt Bodily 这不是关于两个同名的方法,而是关于混淆方法 FolderChange() 和方法 Send()。
猜你喜欢
  • 2011-01-09
  • 1970-01-01
  • 2010-11-11
  • 2011-08-09
  • 1970-01-01
  • 1970-01-01
  • 2020-06-03
  • 2020-12-08
  • 2012-06-09
相关资源
最近更新 更多