mvc3 Проблема передачи данных из View в контроллер - PullRequest
5 голосов
/ 22 сентября 2011

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

Вот частичное представление, которое обрабатывает поиск:

@model CRMNPS.Models.PagedViewModel<CRMNPS.Models.NPSProcessed>
@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{

    <label>
Model Number:&nbsp;&nbsp; @Html.TextBox("searchWord" )
<br /><br />From Date:&nbsp;&nbsp;&nbsp; @Html.EditorFor(m => m.FromDate)
</label>
<label>
<Br /><br />To Date:&nbsp;&nbsp;&nbsp; @Html.EditorFor(m => m.ToDate)
</label>    
<label>
<br /><br />&nbsp;&nbsp;<input class="button" value="Search" type="submit" />
<br />
</label>

}

Вот мое представление индекса:

@model PagedViewModel <CRMNPS.Models.NPSProcessed>

@{
    ViewBag.Title = "CRM Processed List";
    Layout = "~/Views/Shared/_Layout.cshtml";
}


<h2>Processed List</h2>
@{Html.RenderPartial("SearchBox");}
@{Html.RenderPartial("Pager", Model.PagedList);}
@Html.Grid(Model.PagedList).AutoGenerateColumns().Columns(column =>{
column.For(x => Html.ActionQueryLink(x.ModelNumber, "Edit", new { id = x.Id
})).Named("Id").InsertAt(1);
}).Sort(Model.GridSortOptions).Attributes(@class => "grid-style")

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { FromDate = Model.FromDate, ToDate = Model.ToDate, SearchWord = Model.SearchWord }))
{
   <p>
       <input class="button" value="Export to Excel" type="submit" />
   </p>
}    

В нижней части представления индекса у меня есть другая отправка в Html.BeginForm с Formmethod.Post.

Индекс ActionResult, который вызывает это представление, передает модель представления с критериями поиска и объектом IQueryable, который использует mvcContrib.

Когда пользователь нажимает кнопку «Экспорт в Excel», которую я хотел бы передатьвыбранные значения возвращаются в контроллер HttpPost результата действия Index.(FromDate, ToDate и SearchWord)

Значения FromDate, ToDate и SearchWord всегда возвращаются нулевыми.

Я довольно новичок в MVC, поэтому любые конструктивные комментарии приветствуются.

Спасибо

Джо

Ответы [ 2 ]

4 голосов
/ 22 сентября 2011

Так как они не в той форме, которую вы публикуете - (Экспорт в Excel находится в отдельной форме).Входные данные

FromDate, ToDate и SearchWord

находятся в первой форме (в частичном представлении).Таким образом, эти значения не отображаются в контроллере (так как они не являются частью сообщения http).Если вы хотите, чтобы все эти значения передавались обратно в контроллер, они должны быть меньше одного

Html.BeginForm

1 голос
/ 22 сентября 2011

Один из способов - разместить все в той же форме, что и MoXplod, или вы можете использовать некоторый JavaScript для отправки значений поиска в виде строки запроса, перехватывая событие отправки второй формы, например

$('#excel-form').live('click', function(){
   var action = this.action;
   var searchString = $('#SearchWord').val();
   var toDateString = $('#ToDate').val();
   var fromDateString = $('#FromDate').val();
   if(action.indexOf('?')<0)
   {
      action = action+"?SearchWord="+searchString;
   }
   else
  {
     action = action+"&SearchWord="+searchString;
  }
  action = action + "&ToDate="+toDateString + "&FromDate=" + fromDateString;
  $(this).attr('action', action);
  return true;

});

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...