1

私はこれに似たものを持っています:

public class employee
{
    Int id;
    String Name;
    String FamilyName;
    String SecondFamilyName;
}  

public class orders
{
    Int id;
    Int employeeid;
    Int amount;
}

(従業員は多くの注文を持つことができ、注文と従業員は「employeeid」プロパティを介して関連付けられます)

MVC での厳密に型指定された「注文の作成」フォーム:

  • DropDownList を使用すると、注文を作成するときに適切な従業員を選択できます。

  • DropDownList は、SecondFamilyName が null でない従業員の "FamilyName SecondFamilyName, Name" と他の従業員の "FamilyName, Name" を連結する、3 番目のメソッドで定義された方法で従業員の名前を表示する必要があります。

私は何をすべきか?デフォルトの VS 2010 テンプレートを使用して、ランタイムは「名前」を選択して DropDownList に表示します。複合名が必要ですが、その方法がわかりません...

よろしく。

4

2 に答える 2

0

DropDownListのカスタム編集テンプレートを作成しました。

<select id="employeeid" name="employeeid">
    <option value="">Pick an employee</option>
    @foreach (SelectListItem sli in ViewBag.Employees)
    {
        <option value="@sli.Value">@sli.Text</option>
    }
</select>

必要な文字列が表示され、employeeidフィールドにバインドされています。新しいオブジェクトを作成し、必要に応じて従業員の名前を表示することができます。

かなり単純ですが、私のような誰かがこの基本的なタスクのスキルを欠いているときは難しいです。MVCはまったく異なる新しい世界です...

于 2013-01-29T15:02:58.607 に答える
0

更新 2、

数時間作業した後、VS 2010 はデフォルトで、従業員 ID と単一の名前を使用して Create メソッドに入力されるテンプレートを生成することに気付きました...

そう、

作成方法:

  • ViewBag.employeeid を (ID、複合名) のリストとともに追加します

ビューを作成:

  • サーバー側のコードを

    @Html.DropDownList("employeeid", String.Empty)

それで全部です。こんな当たり前のことを前に見ないなんて馬鹿げていると思う...

Dave Aさん、どう思いますか?

編集

リストの作成に使用するコードと複合名を追加するだけです。

--> Employee html ヘルパー、SelectList を生成します (選択されたアイテムを含む)

public static class employeeHelper
{
    public static IEnumerable<SelectListItem> toSelectListItems(this IEnumerable<employee> Employees, Nullable<Int32> selectedID)
    {
        List<SelectListItem> lEmployees = new List<SelectListItem>();

        foreach (employee ee in Employees)
            lEmployees.Add(new SelectListItem
            {
                Selected = selectedID != null && ee.id == selectedID.Value,
                Text = employeeExtender.getEmployeeNames(pp),
                Value = pp.id.ToString()         
            });

        lEmployees = lEmployees.OrderBy(p => p.Text).ToList();

        return lEmployees;
    }
}

--> 複合名を取得するための従業員エクステンダー パフォーマンスのために Stringbuilder を使用する

public class employeeExtender
{
    public static String getEmployeeNames(employee e)
    {
        if (e == null)
            return null;

        StringBuilder sb = new StringBuilder();

        sb.Append(e.FamilyName.ToLower());

        if (!String.IsNullOrEmpty(e.SecondFamilyName) && e.SecondFamilyName.Trim() != String.Empty)
            sb.Append(" " + e.SecondFamilyName.ToLower());

        sb.Append(", ");
        sb.Append(e.Name.ToLower());

        //Capitalize String
        return Thread.CurrentThread.CurrentCulture.TextInfo.ToTitleCase(sb.ToString());
    }
}
于 2013-01-29T20:25:07.517 に答える