2011-09-26 40 views

Trả lời

86

Trước tiên, vấn đề viết hoa.

@model (chữ thường "m") là một từ khóa dành riêng trong quan điểm Razor khai báo kiểu mẫu ở phía trên cùng của cái nhìn của bạn, ví dụ:

@model MyNamespace.Models.MyModel

Sau đó trong tập tin, bạn có thể tham khảo các thuộc tính bạn muốn với @Model.Attribute (chữ hoa "M").

@model tuyên bố mô hình. Model tham chiếu đến mô hình hóa.

Thứ hai, bạn có thể gán giá trị cho mô hình của mình và sử dụng sau này trong trang, nhưng sẽ không liên tục khi trang gửi đến hành động điều khiển của bạn trừ khi đó là giá trị trong trường biểu mẫu. Để có được giá trị trở lại trong mô hình của bạn trong quá trình mô hình ràng buộc, bạn cần phải gán giá trị cho một trường mẫu, ví dụ:

Lựa chọn 1

trong hành động điều khiển của bạn, bạn cần phải tạo ra một mô hình cho chế độ xem đầu tiên của trang của bạn, nếu không, khi bạn cố gắng đặt Model.Attribute, đối tượng Model sẽ không có giá trị.

Bộ điều khiển:

// This accepts [HttpGet] by default, so it will be used to render the first call to the page 
public ActionResult SomeAction() 
{ 
    MyModel model = new MyModel(); 
    // optional: if you want to set the property here instead of in your view, you can 
    // model.Attribute = "whatever"; 
    return View(model); 
} 

[HttpPost] // This action accepts data posted to the server 
public ActionResult SomeAction(MyModel model) 
{ 
    // model.Attribute will now be "whatever" 
    return View(model); 
} 

Xem:

@{Model.Attribute = "whatever";} @* Only do this here if you did NOT do it in the controller *@ 
@Html.HiddenFor(m => m.Attribute); @* This will make it so that Attribute = "whatever" when the page submits to the controller *@ 

Lựa chọn 2

Hoặc, kể từ khi mô hình có tên dựa trên, bạn có thể bỏ qua việc tạo ra các mô hình trong điều khiển của bạn và chỉ đặt tên cho trường biểu mẫu có cùng tên với thuộc tính mô hình của bạn. Trong trường hợp này, thiết lập trường ẩn có tên "Thuộc tính" thành "bất kỳ" sẽ đảm bảo rằng khi trang gửi, giá trị "bất kỳ" sẽ bị ràng buộc vào thuộc tính Attribute của mô hình của bạn trong quá trình liên kết mô hình. Lưu ý rằng nó không phải là một trường ẩn, chỉ bất kỳ trường nhập HTML nào với name="Attribute".

Bộ điều khiển:

public ActionResult SomeAction() 
{ 
    return View(); 
} 

[HttpPost] // This action accepts data posted to the server 
public ActionResult SomeAction(MyModel model) 
{ 
    // model.Attribute will now be "whatever" 
    return View(model); 
} 

Xem:

@Html.Hidden("Attribute", "whatever");

+1

Cảm ơn bạn cho việc này. Câu trả lời chính xác. – levteck

+1

Câu trả lời này nên đi vào đại sảnh danh vọng – petric

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