2013-03-07 28 views
0

我在我看來,有這樣的文本框中確定指標以外的值顯示一個比模型

@Html.TextBoxFor(model => model.MaxNumberOfExtensions == "0" ? "Unlimited" : model.MaxNumberOfExtensions, new { required = "required", id = "maxNumberOfExtensions" }) 

我所試圖做的是說,

如果該值MaxNumberOfExtensions爲0然後在 顯示「無限制」的文本框中,否則顯示,在字段中的值 MaxNumberOfExtensions

Ť他在運行時不起作用。它給出了錯誤

Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions. 

這樣做的正確方法是什麼?

回答

1

HTML助手不支持這種複雜的lambda表達式。它們只支持屬性訪問和索引器訪問表達式。

正確的方法是當然使用視圖模型。因此,您將擁有一個已根據您的域模型的值包含所需文本的屬性。

例如:

public class MyViewModel 
{ 
    public string MaxNumberOfExtensions { get; set; } 
} 

,然後在控制器的描繪這樣的觀點:

public ActionResult SomeAction() 
{ 
    SomeDomainModel model = ... 
    MyViewModel viewModel = new MyViewModel(); 
    viewModel.MaxNumberOfExtensions = model.MaxNumberOfExtensions == "0" ? "Unlimited" : model.MaxNumberOfExtensions; 
    return View(viewModel); 
} 

然後在視圖:

@model MyViewModel 
... 
@Html.TextBoxFor(x => x.MaxNumberOfExtensions, new { required = "required", id = "maxNumberOfExtensions" }) 

備選地,如果應用程序是目前不遵循最佳實踐(不使用視圖模型),您可以在自己的位置編寫自定義模板可以執行此任務。

例如,添加下面的模板~/Views/Shared/EditorTemplates/FormattedNumberOfExtensions.cshtml

@model string 
@{ 
    var value = Model == "0" ? "Unlimited" : Model; 
} 

@Html.TextBox("", value, new { required = "required", id = "maxNumberOfExtensions" }) 

,然後在您的視圖:

@Html.EditorFor(x => x.MaxNumberOfExtensions, "FormattedNumberOfExtensions")