Попытка вызвать метод действия приводит к ошибке просмотра

У меня есть 3 actionResults в одном контроллере, и я хочу, чтобы все actionResults возвращали одно представление, как показано ниже:

В контроллере:

 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 работает хорошо, но поиск actionResult не работает, событие не переходит к точке останова, которую я установил.


person Tran Duy Linh    schedule 13.07.2015    source источник
comment
Попробуйте добавить FormMethod.Post в представление и сделать действие public в контроллере   -  person Tushar    schedule 13.07.2015
comment
как называется контроллер??   -  person Hemant Bhagat    schedule 13.07.2015
comment
@HemantBhagat Поскольку он говорит, что метод Index работает, он должен быть DisplayTableController.   -  person InvisiblePanda    schedule 13.07.2015
comment
@TusharGupta Кажется, что действие уже public, и в любом случае используется метод формы по умолчанию FormMethod.Post. Это не должно быть проблемой, но я тоже не знаю, в чем проблема.   -  person InvisiblePanda    schedule 13.07.2015
comment
Удалось ли вам попробовать код, который я разместил? Это должно работать для вас, или есть другая проблема.   -  person InvisiblePanda    schedule 17.07.2015


Ответы (2)


Вы пытаетесь получить объект Group в своем методе поиска, если это так, ваше представление должно быть строго типизировано с модальным режимом Group.

В противном случае следует исправить метод поиска.

[HttpPost]
 public ActionResult Search(int? GroupId) { 
     List<Group> listResult = ListGroup.Where(m=>m.GroupID == GroupId).ToList();
     return View("Index", listResult);
 }
person blue    schedule 13.07.2015
comment
Я вообще не думаю, что это правильно. Его контроллер DisplayTableController, а не Index. - person InvisiblePanda; 13.07.2015

Я не знаю, в чем проблема. Это может быть связано с тем, что ModelBinder не может сопоставить какое-либо имя свойства из-за неоднозначности, но мы не знаем всех задействованных классов.

Я попытался воспроизвести проблему следующим образом, но не смог этого сделать, поэтому я могу дать вам рабочий (по крайней мере, для меня) пример того, что вы пытаетесь сделать. Я перечислю здесь все, что я создал, чтобы вы могли использовать его и посмотреть, не возникнет ли у вас по-прежнему ошибка.

Я также позволил себе реорганизовать ваше представление. Вам действительно не нужны эти уродливые var i=0 и i++ ;-)

Group класс:

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

Это определенно отлично работает для меня («СОХРАНИТЬ» и «ПОИСК»). Не могли бы вы попробовать подключить это к своему приложению?

person InvisiblePanda    schedule 13.07.2015