gpt4 book ai didi

c# - 将空子对象从父对象传递到局部 View

转载 作者:太空狗 更新时间:2023-10-29 20:08:56 26 4
gpt4 key购买 nike

我有一个对象,其中包含我的 ASP.NET MVC 网络应用程序的模型。传递到 View 中的模型在该特定 View 上具有“小工具”的子模型。这些子模型中的每一个都传递给局部 View (小工具)。

问题是当我在 View 模型中有一个空模型时。请参见下面的示例。

查看模型:

public class FooBarHolder()
{
public FooBar1 FooBar1 { get; set; }
public FooBar2 FooBar2 { get; set; }
}

我们将 FooBarHolder 传递到 View 中,并在 View 内部进行调用,例如

<% Html.RenderPartial("Foo", Model.FooBar1); %>
<% Html.RenderPartial("Foo2", Model.FooBar2); %>

现在假设 Model.FooBar2 为空。我在强类型部分 View 中遇到的错误是“此 View 需要一个 FooBar2 类型的模型,但得到一个 FooBarHolder 类型的模型。”

为什么会发生这种情况而不是仅仅传递一个空值?

最佳答案

这就是 RenderPartial 的方式方法有效(我知道应该记录在案,写博客等等......,我也觉得这有点奇怪)。如果您没有指定模型或传递 null 它将使用父页面的模型。为避免这种情况,您可以使用空合并运算符:

<% Html.RenderPartial("Foo", Model.FooBar1 ?? new Foo()); %>

如果您真的很好奇这是如何实现的,可以从 ASP.NET MVC 2 源代码的相关部分摘录:

// Renders the partial view with an empty view data and the given model
public static void RenderPartial(this HtmlHelper htmlHelper, string partialViewName, object model) {
htmlHelper.RenderPartialInternal(partialViewName, htmlHelper.ViewData, model, htmlHelper.ViewContext.Writer, ViewEngines.Engines);
}

internal virtual void RenderPartialInternal(string partialViewName, ViewDataDictionary viewData, object model, TextWriter writer, ViewEngineCollection viewEngineCollection) {
if (String.IsNullOrEmpty(partialViewName)) {
throw new ArgumentException(MvcResources.Common_NullOrEmpty, "partialViewName");
}

ViewDataDictionary newViewData = null;

if (model == null) {
if (viewData == null) {
newViewData = new ViewDataDictionary(ViewData);
}
else {
newViewData = new ViewDataDictionary(viewData);
}
}
else {
if (viewData == null) {
newViewData = new ViewDataDictionary(model);
}
else {
newViewData = new ViewDataDictionary(viewData) { Model = model };
}
}

ViewContext newViewContext = new ViewContext(ViewContext, ViewContext.View, newViewData, ViewContext.TempData, writer);
IView view = FindPartialView(newViewContext, partialViewName, viewEngineCollection);
view.Render(newViewContext, writer);
}

注意如何处理 null 模型的情况。

关于c# - 将空子对象从父对象传递到局部 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2464690/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com