将数据从视图传递到控制器有问题
本文关键字:控制器 有问题 数据 视图 | 更新日期: 2023-09-27 18:09:29
我使用mvcContrib生成一个网格,允许用户通过键入搜索数据来过滤数据。在我的索引视图中呈现了几个部分视图:
下面是处理搜索的部分视图:@model CRMNPS.Models.PagedViewModel<CRMNPS.Models.NPSProcessed>
@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{
<label>
Model Number: @Html.TextBox("searchWord" )
<br /><br />From Date: @Html.EditorFor(m => m.FromDate)
</label>
<label>
<Br /><br />To Date: @Html.EditorFor(m => m.ToDate)
</label>
<label>
<br /><br /> <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中有另一个提交。使用Formmethod.Post来BeginForm。
调用该视图的Index ActionResult传递一个带有搜索条件的视图模型和一个mvcContrib使用的可查询对象。
当用户按导出到Excel按钮时,我想将选定的值传递回Index actionresult HttpPost控制器。(FromDate, ToDate和SearchWord)
FromDate, ToDate和SearchWord的值总是返回null。
我对MVC相当陌生,所以欢迎任何建设性的意见。
感谢乔因为它们不在您要发布的表单中-(导出到Excel是在单独的表单中)。输入
FromDate, ToDate和SearchWord
是第一种形式(在分部视图中)。因此,这些值不会显示在控制器中(因为它们不是http post的一部分)。如果你想看到所有这些值被传递回控制器,它们应该在一个
下面Html。BeginForm
一种方法是把它们都放在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;
});
将把这些值放在querystring中,并使它们在action方法中可用。或者,您可以使用ajax将这些值发送到控制器,而不是完整的常规返回。