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.

これを行う正しい方法は何ですか?

4

1 に答える 1

1

このような複雑なラムダ式は、HTML ヘルパーではサポートされていません。これらは、プロパティ アクセスとインデクサー アクセス式のみをサポートします。

もちろん、正しい方法はビューモデルを使用することです。そのため、ドメイン モデルの値に基づいて、必要なテキストが既に含まれているプロパティが作成されます。

例えば:

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 に答える