首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >适用于所有PartialViews的自定义ActionResult等效模型

适用于所有PartialViews的自定义ActionResult等效模型
EN

Stack Overflow用户
提问于 2016-01-10 22:01:11
回答 1查看 410关注 0票数 16

我创建了下面的自定义ActionResult,它返回多个分部视图。

代码语言:javascript
复制
public class MultiplePartialViewsResult : ActionResult
{
    private const string Separator = "-";
    private PartialViewResult[] _partialViews;

    public MultiplePartialViewsResult(params PartialViewResult[] partialViews)
    {
        _partialViews = partialViews;
    }

    public override void ExecuteResult(ControllerContext context)
    {
        foreach (var partialView in _partialViews)
        {
            partialView.ExecuteResult(context);
            context.HttpContext.Response.Output.Write(Separator);
        }
    }
}

然后我按如下方式使用它:

代码语言:javascript
复制
return new MultiplePartialViewsResult(
             PartialView("~/Views/RowSumView.cshtml", new List<double>() { 1.0 }),
             PartialView("~/Views/ColumnSumView.cshtml", new List<double>() { 2.0 }));

但是如果我将断点放在MultiplePartialViewsResult的构造函数中,我会发现两种情况下的模型都等于2.0,它用数组中指定的最后一个模型覆盖所有的模型。

尝试在方法中创建耦合变量并将其赋值给PartialViews。然后你会注意到他们都共享相同的模型。

EN

回答 1

Stack Overflow用户

发布于 2016-01-25 23:44:25

您可以使用新的 ViewData / ViewData.Model实例以以下方式初始化对象(对我来说很好):

代码语言:javascript
复制
return new MultiplePartialViewsResult(
    //PartialView("~/Views/RowSumView.cshtml", new List<double>() { 1.0 }),
    //PartialView("~/Views/ColumnSumView.cshtml", new List<double>() { 2.0 })
    new PartialViewResult() { ViewName = "~/Views/RowSumView.cshtml", ViewData = new ViewDataDictionary() { Model = new List<double>() { 1.0 } } },
    new PartialViewResult() { ViewName = "~/Views/ColumnSumView.cshtml", ViewData = new ViewDataDictionary() { Model = new List<double>() { 2.0 } } }
);

自定义操作结果:

代码语言:javascript
复制
public class MultiplePartialViewsResult : ActionResult {
    private const string Separator = "-";
    private PartialViewResult[] _partialViews;

    public MultiplePartialViewsResult(params PartialViewResult[] partialViews) {
        _partialViews = partialViews;
    }

    public override void ExecuteResult(ControllerContext context) {
        foreach(var partialView in _partialViews) {
            partialView.ExecuteResult(context);
            context.HttpContext.Response.Output.Write(Separator);
        }
    }
}

控制器:

代码语言:javascript
复制
public ActionResult Index() {
    return View();
}
public ActionResult FakeAction() {
    return new MultiplePartialViewsResult(
        //PartialView("~/Views/RowSumView.cshtml", new List<double>() { 1.0 }),
        //PartialView("~/Views/ColumnSumView.cshtml", new List<double>() { 2.0 })
        new PartialViewResult() { ViewName = "~/Views/RowSumView.cshtml", ViewData = new ViewDataDictionary() { Model = new List<double>() { 1.0 } } },
        new PartialViewResult() { ViewName = "~/Views/ColumnSumView.cshtml", ViewData = new ViewDataDictionary() { Model = new List<double>() { 2.0 } } }
    );
}

视图:

指数:

代码语言:javascript
复制
@Html.Action("FakeAction")

ColumnSumView.cshtml / RowSumView.cshtml:

代码语言:javascript
复制
@model List<double>
<ul>
    @foreach(double item in Model) {
        <li>@item</li>
    }
</ul>
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34706266

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档