2016-07-27 1 views
0

아래 코드가 있으며 선택한 역할에서 레이블 텍스트베이스를 변경하려고합니다. 내가 레이블 텍스트에 다음 관리를 선택하면MVC에서 drp 선택한 변경 이벤트의 레이블 값을 변경하는 방법

예를 들어, I 등

내가 코드 아래 사용 "관리자 이름"이 필요하지만 작동하지 않습니다.

<div class="editor-field"> 
    @Html.DropDownListFor(model => model.RoleID, new SelectList(ViewBag.RoleLsit, "Id", "RoleName"), "Select Category", new { onchange = "SelectedIndexChanged()" }) 
</div> 

<div>   
    @Html.LabelFor(model => model.RoleName) 
    @Html.EditorFor(model => model.RoleName) 
    @Html.ValidationMessageFor(model => model.RoleName) 
</div> 


<script type="text/javascript"> 

function SelectedIndexChanged() { 

    var sub = document.getElementsByName("RoleName"); 
    sub.value = "Selected Role Name"; 

} 

감사

+0

당신이 무엇을하려고하는지 명확하지 않습니다. 'RoleID'에 대한 드롭 다운리스트가 이미있을 때 왜 세계에서 'RoleName'에 대한 입력이 있습니까? –

+0

Drp selected 이벤트를 기반으로 레이블 텍스트를 변경하려고합니다. 위의 코드는이 질문에 대한 데모입니다. – Hitesh

+0

_label 텍스트 _? ('@ Html.LabelFor (model => model.RoleName)'에 의해 생성 된 레이블을 의미합니까?) –

답변

1

당신의 JS가보기에 당신은, @Html.IdFor를 사용하여 요소를 찾을 수 있습니다.

function SelectedIndexChanged() { 
    //find the label 
    var label = document.querySelector('label[for="@Html.IdFor(m => m.RoleName)"]'); 

    //get the dropDown selected option text 
    var dropDown = document.getElementById("@Html.IdFor(m => m.RoleId)"); 
    var selectedText = dropDown.options[dropDown.selectedIndex].text; 

    //set the label text 
    label.innerHTML=selectedText 

} 

그런데 jQuery를 살펴보면 "재미있는"옵션이 될 수 있습니다. 당신은 단순히 다음의 new { onchange = "SelectedIndexChanged()" 제거 할 수

$('#@Html.IdFor(m => m.RoleId)').change(function() { 
    $('label[for="@Html.IdFor(m => m.RoleName)"]').text($(this).children('option:selected').text()); 

}); 
+0

고마워요 선생님은 이제 작동합니다. – Hitesh

0

기능의 SelectedIndexChanged() {

document.getElementsById("RoleName").InnerHtml="Role name goes here"; 

} 이 HTML 도우미가 렌더링 할 때 때문에 대신 이름의 ID로 요소를 얻을 사용해야합니다 강력한 형식의 바인드 된 속성은 해당 컨트롤의 ID가됩니다. 그래서 귀하의 경우 역할 이름은 ID가됩니다

+1

Label은'@Html.LabelFor'에 의해 생성 될 때'id'가 없으므로'for' 속성을 갖습니다 –

관련 문제