为传递给局部视图的模型设置一个默认值
本文关键字:默认值 一个 设置 模型 局部 视图 | 更新日期: 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);