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 不为空的员工连接“FamilyName SecondFamilyName, Name”,为另一个连接“FamilyName, Name”。

我该怎么办?使用默认的 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 会生成一个模板,该模板在 Create 方法中填充,其中包含员工 ID 和单个姓名......

所以,

创建方法:

  • 添加 ViewBag.employeeid 和(ids,复合名称)列表

创建视图:

  • 将服务器端代码替换为

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

就这样。以前没有看到这么明显的东西,我觉得很愚蠢...

你怎么看,戴夫A?

编辑

只需添加用于构建列表的代码和复合名称:

--> Employee html helper, 生成 SelectList (with selected item)

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;
    }
}

--> Employee 扩展器,获取复合名称 使用 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 回答