2015-07-14 5 views
1

У меня есть простое требование, но я не могу понять, как этого добиться. У меня есть эти свойства в моей модели просмотра.Условно измените атрибут [Display (Name = "")]

public class Feedback 
{  
    [Required] 
    [Display(Name = "Current ID")] 
    public int? PreviousID { get; set; } 

    [Required] 
    [Display(Name = "Next ID")] 
    public int? NextID { get; set; } 

    [Required] 
    public int ScenarioID { get; set; } 

    [Display(Name = "Select you scenario")] 
    public IEnumerable<SelectListItem> YourScenario { get; set; } 
} 

Теперь на взгляд у меня есть,

<div class="form-group"> 
    @Html.LabelFor(m => m.YourScenario, new { @class = "col-sm-3 control-label" }) 
    <div class="col-sm-9"> 
     @Html.DropDownListFor(m => m.ScenarioID, m.YourScenario, "Choose Scenario", new { @class = "form-control chosen-select" }) 
    </div> 
</div> 

<div class="form-group"> 
    @Html.LabelFor(m => m.PreviousID, new { @class = "col-sm-3 control-label" }) 
    <div class="col-sm-9"> 
     @Html.TextBoxFor(m => m.PreviousID) 
    </div> 
</div> 

<div class="form-group" style="display:none"> 
    @Html.LabelFor(m => m.NextID, new { @class = "col-sm-3 control-label" }) 
    <div class="col-sm-9"> 
     @Html.TextBoxFor(m => m.NextID) 
    </div> 
</div> 

На представлении, как это можно видеть, что отображается только PreviousID и DropDownList для сценария. Используя JQuery, я показываю и скрываю div для NextID на основе определенного значения DropDownList. Предположим, что если пользователь выберет «Сценарий 3» из выпадающего списка, отобразится Input for NextID.

Объяснив все это, я хочу изменить отображаемое имя для PreviousID на основе выбранного значения раскрывающегося списка. Поэтому, если пользователь выбирает «Сценарий 1» и «Сценарий 2», тогда отображаемое имя для предыдущего идентификатора должно быть «Текущий идентификатор», и если пользователь выбирает «Сценарий 3», тогда отображаемое имя должно быть «Предыдущим идентификатором». Это изменение также должно быть отражено в резюме валидации. Так любезно скажите мне, как этого достичь? Большое спасибо

+0

Вы можете сказать, что вы пробовали –

+1

@Jigar Pandya Я уже упомянул все детали. Что я пробовал? Изменение внутреннего содержимого div через JQuery, но это не отражается в сообщении об ошибке, отображаемом в ValidationSummary. –

ответ

1

У меня есть две идеи:

1)

Вы можете удалить линию [Display(Name = "Current ID")]. Затем вам нужно использовать Label («SomeName») вместо LabelFor. Затем вы создаете событие типа DropDownList_SelectionChanged, которое затем меняет имя метки.

2)

Или вы добавляете DisplayName член и привязать к нему:

public class Feedback 
{  
    [Required] 
    public int? PreviousID { get; set; } 

    [Required] 
    [Display(Name = "Next ID")] 
    public int? NextID { get; set; } 

    [Required] 
    public int ScenarioID { get; set; } 

    [Display(Name = "Select you scenario")] 
    public IEnumerable<SelectListItem> YourScenario { get; set; } 

    public String DisplayName { 
     get 
     { 
      String name = ""; 
      if (ScenarioID == 1) { 
       name = "SomeName"; 
      } else { 
       name = "otherName"; 
      } 

      return name; 
     } 
    } 
} 

На ваш взгляд:

@Html.Label({Binding Content=m,Path=DisplayName} 

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

+0

Спасибо за ваш добрый ответ. Позвольте мне попробовать. Будет ли это работать и для сообщений проверки? –

+0

Что вы подразумеваете под сообщениями проверки? –

+0

Я использую сводку валидации в представлении, и поля необходимы. Поэтому, когда пользователь отправляет форму без ввода необходимых значений, в сводке проверки отображается сообщение «Требуется идентификатор Currrent».Я искал решение, которое изменяет отображаемое имя, чтобы оно обновлялось для LabelFor, а также в ValidationSummary. –

0

Я предлагаю вам удалить атрибут [DisplayName], а вместо этого использовать элемент <label> вручную в представлении. Дайте ярлыку id, например.

<label for="whatever" id="lbl-whatever">Hello World</label>

нужно создать файл JavaScript, который ссылается вид, через <script> тег, который использует JQuery для захвата события изменения в раскрывающемся списке

$(function(){ 
     $("#ScenarioID").on("change", function() { 
      console.log(this.id); 
      console.log(this.value); 

// I think this.id and this.value should display the id and value of the selected // item in the list. 
      $("#lbl-whatever").text("Foo"); 
     }); 
    }); 

Будем надеяться, что выше должно быть достаточно, чтобы вы начал.

Смежные вопросы