2011-12-30 18 views
8

Tôi có mô hình này:MVC 3 chỉnh sửa điểm cho các lĩnh vực nhất định chỉ

public class ExchangeRate 
{ 
    [Key] 
    public int ExchangeRateID { get; set; } 
    [Required] 
    [Display(Name = "Currency:")] 
    public string Currency { get; set; } 
    [Required] 
    public decimal Rate { get; set; } 
} 

Các "Create" xem đang làm việc tốt, nhưng khi tôi trong giao diện chỉnh sửa, tôi chỉ muốn sở hữu ngoại tệ sẽ được hiển thị và không thể chỉnh sửa. Làm thế nào tôi nên làm điều này? Nếu tôi tạo một mô hình "chỉ xem" cho lớp này, thì tôi sẽ bỏ qua thuộc tính "Tiền tệ" và sẽ không thể hiển thị nó.

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend>ExchangeRate</legend> 

    @Html.HiddenFor(model => model.ExchangeRateID) 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Currency) 
    </div> 
    <div class="editor-field"> 
     @Html.DisplayFor(model => model.Currency) 
    </div> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.Rate) 
    </div> 
    <div class="editor-field"> 
     @Html.EditorFor(model => model.Rate) 
     @Html.ValidationMessageFor(model => model.Rate) 
    </div> 

    <p> 
     <input type="submit" value="Save" /> 
    </p> 
</fieldset> 

}

Thay đổi @ Html.EditorFor (mô hình => model.Currency) để @ Html.DisplayFor (mô hình => model.Currency) không làm việc vì tình trạng mô hình trở nên không hợp lệ khi nó gửi lại cho bộ điều khiển.

Trả lời

10

Bạn có thể thêm

@Html.HiddenFor(model => model.Currency) 

trong biểu mẫu và sau đó sử dụng

@Html.DisplayFor(model=> model.Currency) 

để hiển thị các giá trị chỉ đọc tài sản tiền tệ. Bằng cách đó, khi bạn đăng giá trị sẽ được gửi cùng trong mô hình đã đăng.

+0

Điều này cũng hoạt động kết hợp với trình khởi động Twitter, ví dụ: sử dụng như sau trong khung nhìn: ' @ Html.DisplayFor (m => m.ProductName)' – Manfred

+1

Người dùng có thể không chỉnh sửa các trường đọc thông qua firebug etc? – Sami

4

Bạn đang tìm kiếm:

[HiddenInput(DisplayValue=true)] 

Sau đó hiển thị các biên tập viên, không phải là màn hình (sử dụng EditorFor).

Điều này hiển thị giá trị chỉ đọc, nhưng thêm đầu vào bị ẩn để trạng thái đã đăng hợp lệ.

+0

Đã thử điều này với MVC 4 nhưng không hoạt động đối với tôi và dẫn đến chỉ ẩn. Không có gì được hiển thị với EditorFor(). Tôi có thể đã bỏ qua một cái gì đó, mặc dù. Tôi đã đi cho giải pháp của @mreyeros mà làm việc cho tôi. – Manfred

3

Để hiển thị tiền tệ nhưng không thể chỉnh sửa nó thử

@Html.Label("Currency", Model.Currency) 

nếu bạn cũng cần phải gửi giá trị tiền tệ trở lại với bộ điều khiển thử

@Html.HiddenFor(m => m.Currency) 

Tôi hy vọng điều này sẽ giúp.

+0

Cảm ơn, tôi đã sử dụng giải pháp này – alpinescrambler

+0

Nếu bạn thích giải pháp của tôi, vui lòng bỏ phiếu cho nó :) –

Các vấn đề liên quan