1

コントローラーに異なる名前の 2 つのアクションがありますが、2 番目にデータを送信しようとすると、次のようなエラーが表示されます。

コントローラー タイプ 'HouseholdController' のアクション 'Index' に対する現在の要求は、次のアクション メソッド間であいまいです: System.Web.Mvc.ActionResult タイプ WhatWorks.Controllers.HouseholdController の System.Web.Mvc.ActionResult Index(Int32) ) タイプ 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 コード

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;
    }
}
4

2 に答える 2

2

[AcceptVerbs(HttpVerbs.Post)]or[HttpPost]属性を find メソッドに追加してみてください。

[HttpParamAction]
[HttpPost]
public ActionResult Find(int Id)
{
    var model = GetDisplay().TakeWhile(m => m.familyId == Id);
    return View("Index", model);
}
于 2013-10-02T17:38:02.757 に答える
1

Find アクションを明示的に参照するように BeginForm を修正しましたが、これは追加の属性なしで機能しています。

もっと複雑な解決策を期待していたと思います!

@using (Html.BeginForm("Find", "Household"))
于 2013-10-02T19:21:08.517 に答える