Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 4 MVC4:不明确的行动请求_Asp.net Mvc 4 - Fatal编程技术网

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()。