为传递给局部视图的模型设置一个默认值

本文关键字:默认值 一个 设置 模型 局部 视图 | 更新日期: 2023-09-27 17:52:50

我有一个从另一个部分视图调用的部分视图(一种嵌套的部分视图)。

外部部分视图称为Company,内部部分视图是一个名为searchHelp的自定义控件。都接受参数

现在Company视图获得了Company类型的参数,searchHelper接受了一个可选字符串。这部分工作得很好,因为我正在测试null的模型值,并在其他视图中使用时将默认文本分配为@((Model==null)?"Enter Text":Model),即使没有传递参数。

在我嵌套视图的情况下,如果我不提供字符串作为searchHelper的模型,那么它将company作为外部视图即公司的模型,并给出一个错误。

为传递给局部视图的模型设置一个默认值

@model定义不是一个值设置器,它只是告诉Razor要实例化什么类型的视图。这里不能定义默认值。如果你不传递一个模型给你的分部,那么它将使用父视图的模型,在这种情况下是Company。很明显,Company不是字符串,所以你会得到那个错误。如果您想为部分传递默认值,请在第二个参数中向Html.Partial传递:

@Html.Partial("searchHelp", Model.SomeStringProperty ?? "Enter Text")

你可以从视图中调用string-as-model的位置给它指定一个默认值:

//null coalesce to default string value:
@Html.Partial("searchHelp", Model.searchHelp ?? "default value")  

…使用htmlhelper可能会更好,因为它只定义一次默认值:

public IHtmlString SearchHelp(this HtmlHelper html, string searchHelp = "default value")
{
    // make html here
}
然后

@Html.SearchHelp(Model.searchHelp);