为要传递给Partial View的模型设置默认值

时间:2014-03-24 13:14:07

标签: c# asp.net-mvc razor

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

外部局部视图称为公司,内部局部视图是名为searchHelp的自定义控件。两者都接受一个参数。

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

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

2 个答案:

答案 0 :(得分:1)

@model定义不是值设置器,它只是告诉Razor实例化什么类型的视图。您无法在此处定义默认值。如果未将模型传递给partial,则它将使用父视图的模型,在这种情况下为Company。显然,Company不是字符串,因此您会收到该错误。如果要为部分传递默认值,请在第二个参数中执行Html.Partial

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

答案 1 :(得分:0)

您可以在视图中调用它的位置为字符串作为模型分配默认值:

//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);