2014-03-24 59 views
4

我有一個從另一個局部視圖(嵌套部分視圖的種類)調用的局部視圖。將默認值設置爲傳遞給部分視圖的模型

外部局部視圖被稱爲公司,內部局部視圖是一個名爲searchHelp的自定義控件。兩者都接受一個參數。

現在公司視圖獲取公司類型的參數,searchHelper接受可選字符串。這部分工作正常,因爲我正在測試null的模型值,並且在其他視圖中使用默認文本時默認文本爲@((Model==null)?"Enter Text":Model),即使不傳遞參數。

在我的嵌套視圖的情況下,如果我沒有提供一個字符串作爲searchHelper的模型,那麼它需要company作爲模型從外部視角即公司,並提供一個錯誤。

+0

究竟是什麼問題? – Faust

+0

無法像調用函數時那樣設置字符串的默認值,如果沒有值傳遞。 這是我在視圖@model字符串 ,但我需要這樣的工作'@model字符串=「默認字符串」' – user2084319

回答

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

謝謝你的答覆。 這工作正常。 雖然我認爲有辦法在剃刀中設置默認值 – user2084319

1

@model定義是不是值設置器,它只是告訴Razor實例化的視圖類型。您無法在此處定義默認值。如果您沒有將模型傳遞給您的部分,那麼它將使用父視圖的模型,在這種情況下爲Company。顯然,Company不是一個字符串,所以你會得到那個錯誤。如果您想要爲部分傳遞默認值,請在Html.Partial的第二個參數中執行此操作:

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