3

MvcScaffold バージョン: 0.9.7

さて、MvcScaffold は、私の _CreateOrEdit.cshtml 部分ビューで次のコードを生成します。

<div class="editor-field">
    @Html.DropDownListFor(model => model.LocationId, ((IEnumerable<JobSite.Models.Location>)ViewBag.PossibleLocations).Select(option => new SelectListItem {
        Text = Html.DisplayTextFor(_ => option).ToString(), 
        Value = option.LocationId.ToString(),
        Selected = (Model != null) && (option.LocationId == Model.LocationId)
    }), "Choose...")
    @Html.ValidationMessageFor(model => model.LocationId)
</div>

ただし、これにより次の HTML が生成されます。

<select data-val="true" data-val-number="The field LocationId must be a number." data-val-required="The LocationId field is required." id="LocationId" name="LocationId"><option value="">Choose...</option>
     <option value="1">1</option>
     <option value="2">2</option>
</select>

ご覧のとおり、溺死の「テキスト」は「値」と同じように表示されています。

明らかに、次のようにして、毎回このコードを手動で修正できます。

Text = Html.DisplayTextFor(_ => option.LocationName).ToString(), 

...しかし、これを回避するために問題を修正したいと思います。

誰でもガイダンスを提供できますか?

ありがとうポール

4

1 に答える 1

1

問題は、MvcScaffoldingがテキストフィールドを表すことになっているプロパティを認識していないことだと思います。テンプレートは、「text」プロパティを表す値を持つ列を表す可能性があると考えられるクラス内の候補プロパティを見つけようとします。コードを見たところ、「名前」、「タイトル」などが検索されます。これらのいずれかが見つかった場合は、そのフィールドをテキストプロパティに使用します。使用する実際のコードは次のとおりです。

static string[] displayPropertyNames = new[] { "Name", "Title", "LastName", "Surname", "Subject", "Count" };

最初に見つかったものを使用し、まったく見つからない場合は、現在使用しているコードを取得します。これらの名前のいずれかがない場合や、これらの名前のいずれかが含まれるフィールドがあるが、ドロップダウンのテキスト値を表すことを望まない場合があるため、これは理想的ではありません。

この懸念に対処することになっている他のオプションは、部分クラスを作成し、ドロップダウンにバインドしているモデルタイプにDisplayColumn属性をアタッチすることです。例えば:

[DisplayColumn("LocationName")] public partial class DropDownBoundType {}

ただし、部分クラスの実装により、MvcScaffoldingジェネレーターがフィールドを関連付けキーとして認識しなくなるという他の問題が発生していることがわかりました。そのため、ドロップダウンを使用する代わりに、場合によってはテキストボックスが生成されます。問題がまだ何であるかはわかりません。おそらくそれはあなたに影響を与えないでしょうが、残念ながらそれは私が慎重に踏みにじっている行動です。

また、あなたが9.7を実行していて、新しいバージョンが9.8で利用可能であることに気づきました。私はそれがあなたの問題に対処するとは思わないが、それは他のいくつかに対処する。時間をかけて更新する価値があるかもしれません。

于 2011-04-01T20:26:01.883 に答える