Asp.net mvc 4 MVC4:不明确的行动请求
我有以下代码:Asp.net mvc 4 MVC4:不明确的行动请求,asp.net-mvc-4,Asp.net Mvc 4,我有以下代码: @using (Html.BeginForm("FolderChange", "EdiSender", FormMethod.Post, new {id = "ediFilesForm"})) { var directoriesSelectList = new SelectList(Model.Directories); @Html.DropDownListFor(m => m.SelectedDirectory, directoriesSelectList
@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;
}
}
@使用(Html.BeginForm(“FolderChange”、“EdiSender”、FormMethod.Post、new{id=“ediFilesForm”}))
{
var directoriesSelectList=新的SelectList(Model.Directories);
@DropDownListFor(m=>m.SelectedDirectory,directoriesSelectList,new{@Id=“Directories”,
@style=“width:Auto;”,@size=20,onchange=“$('#ediFilesForm').submit(),name=“action:FolderChange”})
var ediFilesSelectList=新选择列表(Model.EdiFileNames);
@DropDownListFor(m=>m.selectededible,edifileselectlist,新的{@Id=“EdiFileNames”,
@style=“width:Auto;”,@size=20})
}
以下是控制器的一部分:
[HttpPost]
[ActionName(“FolderChange”)]
公共行动结果文件夹更改(EdiFileModel EdiFileModel)
{
ediFileModel=Load(ediFileModel.SelectedDirectory);
返回视图(“索引”,ediFileModel);
}
...
[HttpPost]
[多按钮(Name=“action”,Argument=“Send”)]
公共操作结果发送(EdiFileModel EdiFileModel)
{
....
返回视图(“索引”,ediFileModel);
}
[AttributeUsage(AttributeTargets.Method,AllowMultiple=false,Inherited=true)]
公共类MultipleButtonAttribute:ActionNameSelectorAttribute
{
公共字符串名称{get;set;}
公共字符串参数{get;set;}
public override bool IsValidName(ControllerContext ControllerContext,string actionName,MethodInfo MethodInfo)
{
var isValidName=false;
var keyValue=string.Format(“{0}:{1}”,名称,参数);
var value=controllerContext.Controller.ValueProvider.GetValue(keyValue);
if(值!=null)
{
controllerContext.Controller.controllerContext.RoutedData.Values[Name]=参数;
isValidName=true;
}
返回isValidName;
}
}
当我按下任何按钮时,我会收到以下消息:
当前对控制器类型“EdiSenderController”的操作“FolderChange”的请求在以下操作方法之间不明确:
类型为EdiSimulatorWebSender.Controllers.EdiSenderController的System.Web.Mvc.ActionResult发送(EdiSimulatorWebSender.Models.EdiFileModel)
EdiSimulatorWebSender.Controllers.EdiSenderController类型上的System.Web.Mvc.ActionResult FolderChange(EdiSimulatorWebSender.Models.EdiFileModel)
你能帮我理解我的观点有什么问题吗
谢谢。确保在控制器上向post方法添加post属性
public ActionResult FolderChange ... for the get
[HttpPost]
public ActionResult FolderChange... for the post
@Ehsan Sajjad我将其添加到我的问题中。您有一个名为
FolderChange
的操作?为什么要添加actionmame属性?如果两者完全相同,请删除此属性并尝试:[ActionName(“FolderChange”)]
我怀疑,因为它检测到了两个名为相同的操作name@EhsanSajjad我有一个名为“FolderChange”。我设置此属性是为了防止查找视图“FolderChange”,因为它是相同的视图。请查看添加到问题中的我的控制器。每次我看到该错误时,都是因为控制器上有两个同名的方法。您有两个名为FolderChange的方法吗?不,我没有两个方法。@这不是关于两个同名的方法,而是关于混淆方法FolderChange()和方法Send()。