【发布时间】: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