尝试调用操作方法会导致视图错误

本文关键字:视图 错误 调用 操作方法 | 更新日期: 2023-09-27 18:02:17

我在一个控制器中有3个actionResults,我希望所有的actionResults返回一个视图,如下面的代码:

In controller:

 public ActionResult Index()
        {
            return View(ListGroup);
        }
 [HttpPost]
 public ActionResult Index(List<Group> listModel) {
     @ViewBag.Success = "Update Suceess";
     return View(listModel);//I set break point here
 }
 [HttpPost]
 public ActionResult Search(Group ModelSearch) { 
     List<Group> listResult = ListGroup.Where(m=>m.GroupID == ModelSearch.GroupID).ToList();
     return View("Index", listResult);
 }

我有两种形式:

 @using (Html.BeginForm("Search", "DisplayTable"))
    { 
        <fieldset>
            <legend>Search</legend>
            <input type="text" name="GroupID" />
            <input type="submit" value="SEARCH" />
        </fieldset>
    }
    @using (Html.BeginForm("Index", "DisplayTable", FormMethod.Post))
    {
        var i = 0;
    <table>
        <tr>
            <td>Name</td>
            <td>GroupID</td>
        </tr>
        @foreach(var item in Model){
            <tr>
                <td>@Html.TextBoxFor(m => m[i].Name)</td>
                <td>@Html.TextBoxFor(m => m[i].GroupID)</td>
            </tr>
            i++;
        }
    </table>
        <input type="submit" value="SAVE" />
    }
我希望这个控制器做两件事:
  1. 根据输入搜索记录

  2. 编辑记录。

我把每个函数的actionResult。ActionResult Index工作得很好,但是ActionResult Search不工作,它没有到达我设置的断点。

尝试调用操作方法会导致视图错误

你试图在你的搜索方法中接收Group的对象,如果是这样,你的视图应该使用Group模态强类型

否则,请更正您的搜索操作方法

[HttpPost]
 public ActionResult Search(int? GroupId) { 
     List<Group> listResult = ListGroup.Where(m=>m.GroupID == GroupId).ToList();
     return View("Index", listResult);
 }

我不知道实际的问题是什么。它可能是ModelBinder由于歧义而无法匹配某些属性名,但我们不知道所有涉及的类。

我试着像下面这样重现这个问题,但不能这样做,因此我可以给你一个工作(至少对我来说)的例子,你正在尝试做什么。我将列出我在这里创建的所有内容,以便您可以使用它并查看是否仍然得到错误。

我还冒昧地重构了您的视图。你真的不需要那些丑陋的var i=0i++;-)

Group class:

public class Group
{
  public int GroupID { get; set; }
  public string Name { get; set; }
}

Index视图:

@model IList<WebApplication1.Models.Group>
@using (Html.BeginForm("Search", "DisplayTable"))
{
  <fieldset>
    <input type="text" name="GroupID" />
    <input type="submit" value="SEARCH" />
  </fieldset>
}
@using (Html.BeginForm("Index", "DisplayTable"))
{
  <table>
    <tr>
      <td>Name</td>
      <td>GroupID</td>
    </tr>
    @for (int i = 0; i < Model.Count; i++)
    {
      <tr>
        <td>@Html.TextBoxFor(model => model[i].GroupID)</td>
        <td>@Html.TextBoxFor(model => model[i].Name)</td>
      </tr>
    }
  </table>
  <input type="submit" value="SAVE" />
}

控制器:

  public class DisplayTableController : Controller
  {
    private List<Group> groups = new List<Group>
        {
          new Group { GroupID = 1, Name = "Group 1" },
          new Group { GroupID = 2, Name = "Group 2" }
        };
    public ActionResult Index()
    {
      return View(groups);
    }
    [HttpPost]
    public ActionResult Index(List<Group> viewModel)
    {
      return View(viewModel);
    }
    [HttpPost]
    public ActionResult Search(Group group)
    {
      var result = groups.Where(g => g.GroupID == group.GroupID).ToList();
      return View("Index", result);
    }
  }

这绝对适合我("SAVE"answers"SEARCH")。你能试着把它插入你的应用程序吗?