2012-08-10 2 views
1

asp.net mvc3에서 jquery를 사용하려고합니다. 목록에 EditorTemplates를 사용하고 있습니다. hrfacility에 대한jquery in editorfor

... 
@Html.EditorFor(m => m.wages)  
@Html.EditorFor(m=>m.facility) 

EditorTemplate

@model Mysol.Models.hrfacility 
... 
@Html.DisplayFor(m=>m.name) 
@Html.CheckBoxFor(m=>m.selected)  
@Html.EditorFor(m => m.staffname) 
@Html.EditorFor(m => m.amount) 

<script type="text/javascript"> 
    $('#staffname').attr('readonly', true); 
</script> 

내가 editortemplates의 목록 부분없이 위의 절차를 사용했습니다 및 JQuery와 잘 작동하지만에 대한 :보기

public class staffinfo 
{ 
    public int staffid { get; set; } 
    public double extgrade { get; set; } 
    public string lvlid { get; set; } 
    public IList<SelectListItem> level { get; set; } 
    public string grdid { get; set; } 
    public IList<SelectListItem> grade { get; set; } 
    public double pf { get; set; }  
    public double wages { get; set; } 
    public List<hrfacility> facility { get; set; } 

} 

public class hrfacility 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public double price { get; set; }   
    public int staffid { get; set; } 
    public string staffname { get; set; }    
    public double amount { get; set; } 
    public bool selected { get; set; } 
} 

로 내 모델입니다 이 특별한 상황은 작동하지 않습니다 !!

staffname이 둘 이상있을 수 있습니까?

위의 상황에서 jquery를 어떻게 만들 수 있습니까? (staffname을 읽기 전용으로 만듭니 까?) ??

P. 읽기 전용은 예제 목적을위한 것입니다. 텍스트 상자에 값을 할당하는 것과 같은 jquery를 사용하여 다른 작업을 수행해야합니다. 이 일을 할 수 있다면 다른 일도 할 수 있다고 생각합니다.

감사

답변

2

staffname의 입력 ID는 facility_0_staffname, facility_1_staffname과 같아야하므로 작동하지 않습니다.

staffname 입력에 클래스를 추가하고 해당 클래스에 액세스하는 것이 좋습니다.

당신은

+0

jquery에서 루프를 사용하여 필요한 텍스트 상자를 사용할 수 있습니까 ?? 그렇다면 어떻게? –

+1

@ BJ.BJ : 물론 [.each()] (http://api.jquery.com/each/)를 사용하십시오. 그러나이 작업을 수행 할 필요는 없습니다. attr ('readonly', true)'만 실행하면됩니다. – Mohayemin

1

비제이,

나는 당신의 가장 좋은 방법은 당신이 배수가 주어진, 오히려 Id보다는 class에서 작동하는 것 같아요. 당신은 시도 할 수 있습니다 : 당신이 읽기 전용 텍스트 상자에 표시 할 '알'로

@Html.TextBoxFor(m => m.staffname, new { @class = "staffname" }) 

....  

<script type="text/javascript"> 
    $(function() { 
     $('.staffname').attr('readonly', true); 
    }); 
</script> 

(당신이 늘 htmlAttributes을 받아이 같은 EditorFor을 사용할 수 없습니다 통지, 당신은 기본 inputtype하지만 늘 문제를 사용해야합니다)

[편집] - 텍스트 상자를 사용하여, 필요 클래스를 사용하는 것이 전혀 존재하지 않는 경우는 물론, 당신은 물론 단지 동일한 결과를 달성하기 위해 스타일 '인라인'을 추가 할 수 있습니다

@Html.TextBoxFor(m => m.staffname, new { @readonly = "true" }) 

OR (br owser 단점) :

@Html.TextBoxFor(m => m.staffname, new { @readonly = "readonly" }) 

NB

하나 더 가지, 원격 기회 (jQuery 라이브러리가로드되는 전에 EditorFor 템플릿이 실제로 호출되고 있음) 자바 스크립트로드에 따라 거기에 추가 . 생성 된 소스를보고 이것이 맞지 않는지 확인하십시오. Prolly는 문제가 아니지만 이전에는 editorfor 템플릿 및 부분 텍스트로 나를 잡아 냈습니다.

+0

가 이미이 시도하고 그 중 하나가 작동하지 않습니다 (파이어 폭스) 파이어 버그와 ID를 확인할 수 있습니다 :(아마 때문에 목록의 사용입니다. 그렇지 않으면 아무 문제가 전혀 없었다. 하지만이 목적을 위해 목록이 필요합니다. 다른 방법이 있습니까?어쩌면 편집기 템플릿을 사용하지 않을까요 ?? –

+0

글쎄, @ Html.TextBoxFor를 사용한다면, 자바 스크립트를 사용하는 대신에 읽기 전용 attr을 도우미에 직접 추가 할 수 있습니다. 위에 편집을 참조하십시오. –

+0

아니요, 여전히 작동하지 않습니다. –