我在员工的Db中将Gender属性设置为小int。当用户创建新员工时,我希望他通过单击单选按钮选择男/女(工作正常)。一切都工作正常(创建和编辑),但我希望以形式(索引,细节和删除)显示不是1或2,而是男/女。在视图中应该有一些if语句,但我不知道在哪里放或者如何写出正确的...
任何想法?
谢谢!
这是模型代码的一部分:
这是来自details.cshtml:
答案 0 :(得分:0)
使用condition ? true : false
选择器
int gender = 1; // assumed male
String genderDesc = (gender == 1) ? "Male" : "Female";
你可以将它作为下拉字段吗?在您的控制器中执行:
ViewBag.Gender = new[]
{
new SelectListItem { Text = "Male", Value = "1" },
new SelectListItem { Text = "Female", Value = "2" }
}.WithEmpty();
WithEmpty()
会给你一个空白选项,否则它会选择最上面一个。
@Html.DropDownListFor(m=> m.Gender, (Ienumarable<SelectListItem>)ViewBag.Gender);
这样用户将看到男性和女性,但该值将使用1或2的值绑定到您的模型。
答案 1 :(得分:0)
如果你想避免在你的模型上有额外的属性或者向你的viewbag添加东西,你可以使用下面的剃刀语法内联编写它。
<div class="display-field">
@if (model.GENDER == 0){ @Html.Raw("Male") }
@else if (model.GENDER == 1){ @Html.Raw("Female") }
</div>
这是我的头脑,所以你可能需要检查确切的语法,但我认为这很接近。它也会在div中转储“男性”或“女性”,你可能想把它放在标签或p标签中。
然而,这不是我在生产应用程序中使用的方法,在整个代码中我将使用性别枚举来赋予您的位值意义并扩展枚举以包括您可以为演示目的解析的描述。
答案 2 :(得分:0)
我认为根据你所说的,你可以使用razor语法在内联中编写内容,如下所示:详情.c。
<div class="display-field">
@if(model.GENDER ==0)
{
<label>Male</label>
}
else if(model.Gender==1)
{
<label>Female</label>
}
</div>
我认为如果您需要任何帮助,这必须足以在详细信息页面中显示性别.plz评论
答案 3 :(得分:0)
我建议您创建一个ViewModel类,以与数据库模型分离的View友好格式表示Employee实体,并将其显示在强类型视图中,以便您可以从控制器返回它。
提示:将Gender
属性表示为ViewModel
中的字符串,并将字节转换为controller
您可以将代码放在控制器中,例如:
public ActionResult EmployeeDetails(int id)
{
//retrieve the entity from the DB
//set other employee properties here.
//I'm assuming you have set males to 2 and females to 1
...
employeeViewObject.Gender = employeeObjectFromDB.Gender.Value==2?"Male":"Female";
return View(employeeObjectFromDB);
}
您的强类型视图在显示性别时不会遇到问题,同时可以节省混合代码和标记的污垢:
<p>model.Gender</p>
或
Html.DisplayFor(model=>model.Gender)