2012-08-10 75 views
1

我想在asp.net mvc3中使用jquery。我正在使用EditorTemplates作爲列表。我的模型是編輯器中的jquery for

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; } 
} 

查看:

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

EditorTemplate爲hrfacility

@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的工作正常,但對於這種特殊的情況,它不工作!

是否因爲可能有多個職員姓名?

我怎樣才能讓jquery爲上述情況工作(使staffname只讀)?

P.S.只讀僅用於示例目的。我需要用jquery做其他事情,比如將值分配給文本框。如果我能得到這份工作,我想我也可以做其他事情。

感謝

回答

2

它不起作用,因爲輸入的staffname ID應該是這樣的facility_0_staffnamefacility_1_staffname等。

您最好在staffname輸入中添加一個類並使用該類訪問它。

您可以檢查與螢火蟲的ID(在Firefox)

+0

我們可以在jquery中使用循環來使用所需的文本框嗎?如果是這樣? – 2012-08-12 03:40:12

+1

@ BJ.BJ:當然,使用[.each()](http://api.jquery.com/each/)。但是,您不需要執行此任務。只要執行'$(「.classname」)。attr('readonly',true)'就可以完成了。 – Mohayemin 2012-08-12 10:47:43

1

BJ,

我覺得你最好的選擇可能是在class,工作,而不是一個Id因爲你有數倍。你可以嘗試:

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

....  

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

(注意不能使用EditorFor因爲這不會接受htmlAttributes,您必須爲你「知道」你想在一個只讀文本框來顯示它使用基本的inputType,但不會事)

[編輯] - 當然,如果使用的是文本框,就沒有必要在所有使用一個類,當然你也可以只添加樣式「內聯」,以達到相同的結果:

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

OR(br) owser怪癖):

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

NB

一個進一步的東西添加,有小的機會(這取決於你的JavaScript加載)的EditorFor模板實際上是被稱爲前的jQuery庫被加載。通過查看生成的源代碼來檢查是不是這種情況。這不是一個問題,而是一個使用模板和部分編輯器抓住我的問題。

+0

我已經嘗試過這一點,它不工作,要麼:(也許是因爲使用了列表的,否則沒有任何問題的。但爲此我需要名單,還有其他方法嗎?也許不使用編輯器模板? – 2012-08-10 08:51:04

+0

好吧,如果您使用@ Html.TextBoxFor,您可以將只讀attr直接添加到幫助器上,而不是使用javascript。請參閱上面的編輯 – 2012-08-10 08:54:33

+0

不,它仍然不起作用 – 2012-08-10 09:08:18