2013-04-08 7 views
2

У меня есть этот код на мой взгляд:Присвоить значение EditorFor с помощью JavaScript

<div class="drop-down-list"> 
     <%: Html.EditorFor(model => model.StageId,new { id="hiddenStageID"}) %> 
     <%: Html.ValidationMessageFor(model => model.StageId) %> 
    </div> 

И это мой код Javascript, чтобы установить значение EditorFor. Но это не работает:

<script> 
      var e = document.getElementById("stageTwoView"); 
      var listIndex = e.selectedIndex; 
      var stageIdVal = list[listIndex].valueOf(); 
      document.getElementById('hiddenStageID').value = stageIdVal; 
</script> 

, например stageIdVal получить это значение: "1003". Но последняя строка не работает! Зачем?

ответ

2

EditorFor не принимает htmlAttributes в качестве параметра (что, как я думаю, вы ожидаете); это будет TextBoxFor.

Что вы делаете, так это передать additionalViewData в шаблон редактора, поэтому, если вы не используете его в своем редакторе, вам фактически не присваивается идентификатор этому элементу (и, следовательно, он не может получить его с помощью JS).

Если вы хотите, чтобы дать текстовому полю ID, либо настроить шаблон редактора, или использовать TextBoxFor вместо так что вы можете передать его дополнительные атрибуты:

@Html.TextBoxfor(x => x.StageId, new { id = "hiddenStageID" }) 

Если я не ошибаюсь (я может быть из-за того, что у меня нет шаблона, видимого передо мной. Возможно, вы его настроили, и в этом случае я делаю неточное предположение, и я могу обновить свой ответ).

+0

Спасибо большое Брэд. Он отлично работает! – Angelina

+0

Нет проблем. Не забывайте, что не принимать анализатор бритвы как должное; всегда view-source, чтобы убедиться, что элемент, который вы пытаетесь вывести, и фактический вывод выровнены. ;-) –