将视图中的模型传递回动作

时间:2010-07-15 20:22:10

标签: c# model asp.net-mvc-2 iqueryable

我想知道如何将模型传递回动作,以便我可以继续处理数据,但是根据按下的按钮执行不同的操作

要将其发回,我指定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>());
 }

由于

2 个答案:

答案 0 :(得分:0)

我认为你想要做的就是让你的预览和提交动作都采用List doms。如果预览没有发布,你可能需要在某处有一个EditorForModel(即使它是隐藏的)。换句话说,您的编辑视图会发布到预览操作(显示视图),然后该页面应将数据发布到您的提交操作。我相信会这样做。希望有所帮助..

答案 1 :(得分:0)

通常在MVC中,您不会将大型DOM对象列表传递回服务器以“重新构造”实体或域对象列表。将值发布到Controller操作时,它们几乎总是来自HTML表单。在幕后,MVC通过

从POST中提取值
Request.Forms["fieldName"]

然后尝试将值自动映射到ActionMethod中的参数。

如果我了解您的场景,最常见的做法是在触发操作时向Controller提交或传递KEY(或某些标识符),然后使用它来获取必要的域对象(来自缓存,来自数据库,磁盘等)。如果可扩展性是一个问题,那么良好的缓存策略可以帮助避免代价高昂的I / O操作。

希望有所帮助。