2012-07-03 39 views
23

我使用MVC 3和剃刀剃鬚刀如何創建一個CheckBox並使其成爲READONLY?

目前我使用

@model MyProject.ViewModels.MyViewModel 

    @foreach (var item in Model.MyProperty) 
{ 
    <tr> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id = item.AdvSlotId }) | 
      @Html.ActionLink("Details", "Details", new { id = item.AdvSlotId }) | 
      @Html.ActionLink("Delete", "Delete", new { id = item.AdvSlotId }) 
     </td> 
     <td> 
      @item.AdvSlotId 
     </td> 
     <td> 
      @item.Name 
     </td> 
     <td> 
      @item.Description 
     </td> 
     <td> 
      @Html.CheckBox(item.IsPublished, new { @disabled = "disabled" }) 
     </td> 
     <td> 
      @item.Notes 
     </td> 
    </tr>  
} 

視圖模型:

namespace MyProject.ViewModels 
{ 
    public class MyViewModel 
    { 
     public MyViewModel(List<AdvSlot> advSlots) 
     { 
      MyProperty= advSlots; 
     } 

     public List<AdvSlot> MyProperty { get; set; } 

    } 
} 

要在我的模型顯示一個屬性複選框。正如我所做的是錯誤的,所以我只能顯示像TRUE這樣的文本。

請問如何使用Razor創建CheckBox?我也需要將它作爲READONLY。

感謝您的幫助。

回答

29

應該是這樣的:

@Html.CheckBoxFor(m => m.IsPublished, new { @disabled = "disabled" }) 

UPDATE:

假設你AdvSlot類包含IsPublished你可以在你的循環寫一個屬性:

<td> 
    @Html.CheckBox(item.AdvSlotId + "_IsPublished", item.IsPublished, new { @disabled = "disabled" }); 
</td> 
+0

感謝LeftyX的評論,我收到一個錯誤,我無法創建textcheckbox。你能幫我解決嗎?謝謝 – GibboK

+0

請注意MyProperty是ViewModel中的一個屬性如何解決它的任何想法?謝謝 – GibboK

+0

@GibboK:請問你是否也包括你的viewmodel? – LeftyX

0

在你MyViewModel你可以去掉setter:

public bool IsPublished 
{ 
    get { 
     //... get from db 
     } 
} 

,並在您查看:

@Html.CheckBoxFor(m => m.IsPublished, new {@disabled="disabled"}) 
+0

我還有一些問題,請注意我的編輯 – GibboK

+0

這行應該給你錯誤@ Html.CheckBox(item.IsPublished,new {@disabled =「禁用」}),它有一些無效的參數 –

16
@Html.CheckBoxFor(model => model.IsActive, new { onclick = "return false" }) 

這應該工作。然而,我遇到了@disabled =「disabled」的問題。如果我使默認複選框被選中,同時禁用複選框,則不會發布其值。在控制器中,它會變得錯誤。使用「返回false」用戶將無法更改該值,並且它也會發布默認情況下已設置的值。

+3

您的答案應該被接受。如果我們使用property @ disabled =「disabled」,那麼文本框始終將FALSE傳遞給服務器 –

+0

@Ahn Hoang我同意你的意見。在我看來,這是一個完美的答案,因爲我之前曾經面對同樣的事情。 – gdmanandamohon

+0

這是一個更好的解決方案 –

1

我使用MVC4,你會得到一個簡單的像

@Html.DisplayFor(m => m.IsPublished) 

無需關心同樣的效果,選擇複選框或設置禁用自己。不確定,如果這是MVC4中的新功能,那麼也許它也可以在MVC3中使用。