我的控制器中有两个名称不同的操作,但是当我尝试将数据发送到第二个时,我收到一条错误消息:
控制器类型的当前操作请求"索引" "家庭控制者"在以下操作之间模棱两可 方法:System.Web.Mvc.ActionResult Find(Int32) on type WhatWorks.Controllers.HouseholdController System.Web.Mvc.ActionResult Index(Int32) on type WhatWorks.Controllers.HouseholdController
我发现的所有其他问题都与具有相同名称的操作有关。我无法弄清楚我哪里出了问题,尽管可能有更好的方法来完成我正在尝试的事情......
控制器代码
public ActionResult Index(int page = 1)
{
int pagesize = 10;
var model = GetDisplay().OrderBy(i => i.familyId);
return View(model.ToPagedList(page, pagesize));
}
//
// GET: /HouseholdSearch/
public ActionResult Search()
{
return PartialView("Find");
}
[HttpParamAction]
public ActionResult Find(int Id)
{
var model = GetDisplay().TakeWhile(m => m.familyId == Id);
return View("Index", model);
}
部分视图"查找"
@using BootstrapSupport
@model WhatWorks.ViewModels.HouseholdListViewModel
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset class="form-horizontal">
@Html.LabelFor(model => model.familyId, new { @class = "control-label" })
<div class="controls">
@Html.TextBoxFor(model => model.familyId, new { @class = "input-mini" })
@Html.ValidationMessageFor(model => model.familyId, null, new { @class = "help-inline" })
</div>
<div>
<button type="submit" name="Find" class="btn ">Search</button>
</div>
</fieldset>
}
HTTPParamAction Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Reflection;
public class HttpParamActionAttribute : ActionNameSelectorAttribute
{
public override bool IsValidName(ControllerContext controllerContext, string actionName, MethodInfo methodInfo)
{
if (actionName.Equals(methodInfo.Name, StringComparison.InvariantCultureIgnoreCase))
return true;
var request = controllerContext.RequestContext.HttpContext.Request;
return request[methodInfo.Name] != null;
}
}
尝试将 [AcceptVerbs(HttpVerbs.Post)]
或 [HttpPost]
属性添加到查找方法:
[HttpParamAction]
[HttpPost]
public ActionResult Find(int Id)
{
var model = GetDisplay().TakeWhile(m => m.familyId == Id);
return View("Index", model);
}
我已经修改了 BeginForm 以显式引用 Find 操作,这在没有任何额外属性的情况下工作。
我想我只是期待一个更复杂的解决方案!
@using (Html.BeginForm("Find", "Household"))