0

我的视图中有这个文本框定义

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

我想做的是说,

如果 MaxNumberOfExtensions 值为 0,则在文本框中显示“Unlimited”,否则显示 MaxNumberOfExtensions 字段中的值

这在运行时不起作用。它给出了错误

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

这样做的正确方法是什么?

4

1 回答 1

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")
于 2013-03-10T09:51:20.190 回答