2016-10-03 5 views
-1

Мне нужно передать уже существующую модель в метод из моего частичного, проблема заключается в том, что (он выглядит) этот синтаксисASP.NET MVC вызов метода

@using (Html.BeginForm("EmployeeOverallReportFilter", "Reports", FormMethod.Post)) {}

воссоздает свою модель, потому что мой контроллер получает модель с данными только от редактирования ящиков внутри @using {}

другими словами:

  1. new Model
  2. Добавьте некоторые данные & doMagic и перейти к моему частичному
  3. В моей частичной добавить больше данных и передать его в контроллер
  4. Работы с данными

и у меня есть проблемы в шаге 3, потому что как некоторые (я думаю, что из-за @using (Html.BeginForm("EmployeeOverallReportFilter", "Reports", FormMethod.Post)) {}) я теряю данные добавлены в шаге 2.

Возникает вопрос:

это правда? Может ли @using (Html.BeginForm()) {} воссоздать мою модель или добавить код?

Есть еще один способ вызова метода и передачи данных там?

Я попытался это: <input type="submit" onclick="@Html.Action("EmployeeOverallReportFilter", "Reports", Model)" />

Но ошибка:

Exception Details: System.Web.HttpException: A public action method 'EmployeeOverallReportFilter' was not found on controller 'BTGHRM.Controllers.ReportsController'.

[HttpPost] 
    public ActionResult EmployeeOverallReportFilter(EmployeeOverallReport model) 
    { 
     //foreach(var item in model.ListOfPersonalData) 
     //{ 
     // //NameFiler 
     // if((!item.FirstName.Contains(model.ModelFilters.NameFilter)) && model.ModelFilters.NameFilter!=String.Empty) model.ListOfPersonalData.Remove(item); 
     //} 
     return View("EmployeeOverAllReport", model); 
    } 
+2

Форма возвращает только значения своих успешных элементов управления. Если вы ранее сохранили некоторые связанные данные, добавьте его идентификатор в значение маршрута или скрытый ввод, чтобы опубликовать его и получить эти данные в методе POST. –

+1

Ошибка возникает из-за того, что у вас должен быть метод в ваших отчетах Контроллер, называемый «EmployeeOverallReportFilter», и его нужно украсить '[Post]'. Чтобы передать существующие данные назад, вам нужна ваша модель просмотра, чтобы включить свойства данных, которые вы хотите сохранить, и в методе '[Get]' вам необходимо установить их. Затем, когда вы отправляете сообщение снова, они будут идти до тех пор, пока они являются частью формы. – bilpor

+1

Вам нужно будет включить скрытые поля для всех свойств, которые вы хотите отправить назад, вместе с данными, введенными пользователем в форме. – sachin

ответ

2

Я хотел бы предложить создать сеанс и сохранить существующую модель, а затем приравнять новые изменения в существующая модель из сеанса. Если вы сохраните все свои данные на странице, используя механизм, подобный скрытым полям, это сделает вашу страницу тяжелой.

+0

Это похоже на решение, но у меня есть проблема с mb, вы можете мне помочь: EmployeeOverallReport give = list; @Session ["ReportModel"] = дать; (LATER) var take = Session ["ReportModel"]; Проблема в том, что он не может преобразовать тип 'object' в тип моей модели, и поэтому я не могу получить доступ к внутренним свойствам модели. –

+1

var take = (EmployeeOverallReport) Session ["ReportModel"]; это должно сделать это. –

+0

@R Jain большое спасибо, хороший незнакомец) –