2013-02-28 4 views
0

У меня есть атрибут Gender как крошечный int в Db для сотрудника. Когда пользователь создает нового сотрудника, я хочу, чтобы он сам выбирал мужчину/женщину (который работает правильно), нажав на переключатель. Все работает нормально (создайте и отредактируйте), но я хочу отображать в форме (для индекса, данных и удаления) не 1 или 2, а мужчина/женщина. должно быть какое-то утверждение if, но я не уверен, где его поставить или как правильно написать один ...Asp.net mvc3 Как отображать байт как строку? Asp.net mvc3

любая идея? Спасибо! это часть кода от модели: enter image description here

Это один из details.cshtml:

enter image description here

+0

У вас есть код? – CR41G14

+0

Я обновил свой вопрос с некоторыми фотографиями кода – Nevena

+0

Может ли это быть выпадающим списком? – CR41G14

ответ

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.

0

Если вы хотите, чтобы избежать дополнительных свойств на модели или добавив товар в viewbag вы можете написать его рядным с использованием синтаксиса бритвы, как показано ниже ..

<div class="display-field"> 
@if (model.GENDER == 0){ @Html.Raw("Male") } 
@else if (model.GENDER == 1){ @Html.Raw("Female") } 
</div> 

это у верхней части моей головы, так что вам может понадобиться, чтобы проверить точный синтаксис, но я думаю, что это близко. Он также просто сбрасывает «Male» или «Female» внутри div, вы можете поместить его в ярлык или p-метку по крайней мере.

Это, однако, не тот подход, который я бы использовал в производственном приложении, в течение всего кода я бы использовал переписку по полу, чтобы придать смысл вашему значению бита и расширять перечисление, чтобы включить описание, которое можно проанализировать для целей презентации.

+0

, спасибо, он работает в details.cshtml и delete.cshtml! Но не в index.cshtmL, где у меня есть @ Html.DisplayFor (modelItem => item.GENDER) .. – Nevena

+0

Глупый вопрос, но вы изменили модель.GENDER в моем примере на item.GENDER в вашем index.cshtml? –

+0

да я сделал, чего-то еще не хватало :) Большое спасибо !!! : D: D – Nevena

0

Я думаю, что от того, что у сказал, и может записать его рядный с помощью синтаксиса бритву, как показано ниже в ур details.cshtml

<div class="display-field"> 
@if(model.GENDER ==0) 
{ 
<label>Male</label> 
} 
else if(model.Gender==1) 
{ 
<label>Female</label> 
} 
</div> 

Я думаю, что это должно быть достаточно для отображения Пол в деталях page.plz комментарий если вам нужна какая-либо помощь

0

Я бы посоветовал создать класс ViewModel для представления объекта Employee в формате View-friendly, отделенном от вашей модели базы данных, и представить его в строго типизированном виде, чтобы вы могли вернуть его из контроллер.

Подсказка: Иметь 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)