我想知道如何将模型传递回动作,以便我可以继续处理数据,但是根据按下的按钮执行不同的操作
要将其发回,我指定Control,Action并使用新的{dom = Model}来指定参数。
dom是一个List(所以是一个域对象列表。我传入的模型是一个IQueryable。当我使dom成为一个IQueryable时,我仍然没有从视图中收到任何内容。这里是使用Telerik控件的片段
VIEW 的
<% Html.Telerik().Grid(Model).Name("Domains")
.DataKeys(dataKeys => dataKeys.Add(c => c.DomainId)).DataKeys(dataKeys => dataKeys.Add(c => c.Timestamp))
.Columns(columns =>
{
columns.Template(o =>
{ %>
<%= Html.Encode(Html.OutputAction(ViewData["PerformActions"] as List<string>))%>
<%
}).Title("Action");
columns.Bound(o => o.DomainId);
columns.Bound(o => o.Name);
columns.Bound(o => o.SiteId);
columns.Bound(o => o.ScrubAndRedirect);
columns.Bound(o => o.ReportingSiteId);
columns.Bound(o => o.TrafficCopClass);
columns.Bound(o => o.SiteName);
columns.Bound(o => o.FeedType);
columns.Bound(o => o.Active);
}).Pageable().Sortable().Filterable().DataBinding(db => db.Server().Select("Domains", "Preview", new { doms = Model })).Render();%>
*ACTION*
public ActionResult Preview(List<Domain> doms)
{
return View("Preview", doms.AsQueryable<Domain>());
}
由于
答案 0 :(得分:0)
我认为你想要做的就是让你的预览和提交动作都采用List doms。如果预览没有发布,你可能需要在某处有一个EditorForModel(即使它是隐藏的)。换句话说,您的编辑视图会发布到预览操作(显示视图),然后该页面应将数据发布到您的提交操作。我相信会这样做。希望有所帮助..
答案 1 :(得分:0)
通常在MVC中,您不会将大型DOM对象列表传递回服务器以“重新构造”实体或域对象列表。将值发布到Controller操作时,它们几乎总是来自HTML表单。在幕后,MVC通过
从POST中提取值Request.Forms["fieldName"]
然后尝试将值自动映射到ActionMethod中的参数。
如果我了解您的场景,最常见的做法是在触发操作时向Controller提交或传递KEY(或某些标识符),然后使用它来获取必要的域对象(来自缓存,来自数据库,磁盘等)。如果可扩展性是一个问题,那么良好的缓存策略可以帮助避免代价高昂的I / O操作。
希望有所帮助。