将默认值设置到传递给部分视图的模型中。

4

我有一个部分视图,它从另一个部分视图调用(类似于嵌套的部分视图)。

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

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

在我的嵌套视图的情况下,如果我不为 searchHelper 提供字符串作为模型,则它将从外部视图即公司中获取 company 作为模型并出现错误。


你的问题是什么? - Faust
无法像调用函数时设置字符串的默认值一样,如果没有传递任何值,则无法设置其默认值。 这是我在视图中放置的 @model string 但我需要像这样工作 @model string="默认字符串" - user2084319
2个回答

1
@model定义不是一个值设置器,它仅告诉Razor要实例化哪种类型的视图。在此处无法定义默认值。如果您不将模型传递给部分,则它将使用父视图的模型,这种情况下为Company。显然,Company不是字符串,所以会出现错误。如果您想传递部分的默认值,请在Html.Partial的第二个参数中设置。

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

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

谢谢你的回复。 那很好用。 虽然我认为在Razor中设置默认值的方法。 - user2084319

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接