Các câu trả lời là rất tốt nhưng có một cách khác trong bản phát hành mới nhất của MVC và .NET mà tôi thực sự thích sử dụng, thay vì các phím FormCollection và Request "kiểu cũ".
Hãy xem xét một đoạn mã HTML chứa trong thẻ biểu mẫu thực hiện AJAX hoặc ĐĂNG MẪU.
<input type="hidden" name="TrackingID"
<input type="text" name="FirstName" id="firstnametext" />
<input type="checkbox" name="IsLegal" value="Do you accept terms and conditions?" />
Bộ điều khiển của bạn sẽ thực sự phân tích cú pháp dữ liệu biểu mẫu và cố gắng cung cấp nó cho bạn dưới dạng các tham số của kiểu đã xác định. Tôi đã bao gồm hộp kiểm vì nó là một hộp kiểm phức tạp. Nó trả về văn bản "on" nếu được chọn và null nếu không được chọn. Tuy nhiên, yêu cầu là các biến được xác định này PHẢI tồn tại (trừ khi có giá trị nullable (hãy nhớ mặc dù điều đó string
là nullable)) nếu không thì việc quay lại AJAX hoặc POST sẽ không thành công.
[HttpPost]
public ActionResult PostBack(int TrackingID, string FirstName, string IsLegal){
MyData.SaveRequest(TrackingID,FirstName, IsLegal == null ? false : true);
}
Bạn cũng có thể đăng lại một mô hình mà không cần sử dụng bất kỳ trợ giúp dao cạo nào. Tôi đã nhận ra rằng điều này là cần thiết một số lần.
public Class HomeModel
{
public int HouseNumber { get; set; }
public string StreetAddress { get; set; }
}
Đánh dấu HTML sẽ đơn giản là ...
<input type="text" name="variableName.HouseNumber" id="whateverid" >
và bộ điều khiển của bạn (Razor Engine) sẽ chặn "Tên biến" của Biến biểu mẫu (tên tùy thích nhưng giữ nó nhất quán) và cố gắng xây dựng và truyền nó tới MyModel.
[HttpPost]
public ActionResult PostBack(HomeModel variableName){
postBack.HouseNumber; //The value user entered
postBack.StreetAddress; //the default value of NULL.
}
Khi bộ điều khiển đang mong đợi một Model (trong trường hợp này là HomeModel), bạn không cần phải xác định TẤT CẢ các trường vì trình phân tích cú pháp sẽ để chúng ở chế độ mặc định, thường là NULL. Điều thú vị là bạn có thể kết hợp và kết hợp các mô hình khác nhau trên Mark-up và phân tích cú pháp sau đăng sẽ phổ biến nhất có thể. Bạn không cần xác định mô hình trên trang hoặc sử dụng bất kỳ trình trợ giúp nào.
MẸO: Tên của tham số trong bộ điều khiển là tên được xác định trong mã đánh dấu HTML "name =" không phải tên của Model mà là tên của biến mong đợi trong!
Việc sử dụng List<>
phức tạp hơn một chút trong việc đánh dấu.
<input type="text" name="variableNameHere[0].HouseNumber" id="id" value="0">
<input type="text" name="variableNameHere[1].HouseNumber" id="whateverid-x" value="1">
<input type="text" name="variableNameHere[2].HouseNumber" value="2">
<input type="text" name="variableNameHere[3].HouseNumber" id="whateverid22" value="3">
Chỉ mục trên Danh sách <> PHẢI luôn luôn dựa trên 0 và tuần tự. 0,1,2,3.
[HttpPost]
public ActionResult PostBack(List<HomeModel> variableNameHere){
int counter = MyHomes.Count()
foreach(var home in MyHomes)
{ ... }
}
Sử dụng IEnumerable<>
cho các chỉ số dựa trên không và không tuần tự đăng lại. Chúng ta cần thêm một đầu vào ẩn bổ sung để giúp kết dính.
<input type="hidden" name="variableNameHere.Index" value="278">
<input type="text" name="variableNameHere[278].HouseNumber" id="id" value="3">
<input type="hidden" name="variableNameHere.Index" value="99976">
<input type="text" name="variableNameHere[99976].HouseNumber" id="id3" value="4">
<input type="hidden" name="variableNameHere.Index" value="777">
<input type="text" name="variableNameHere[777].HouseNumber" id="id23" value="5">
Và mã chỉ cần sử dụng IEnumerable và gọi ToList()
[HttpPost]
public ActionResult PostBack(IEnumerable<MyModel> variableNameHere){
int counter = variableNameHere.ToList().Count()
foreach(var home in variableNameHere)
{ ... }
}
Bạn nên sử dụng một Mô hình duy nhất hoặc một ViewModel (Mô hình nối các mô hình khác để tạo Mô hình 'Chế độ xem' phức tạp) trên mỗi trang. Trộn và kết hợp như đã đề xuất có thể được coi là thực hành xấu, nhưng miễn là nó hoạt động và có thể đọc được thì nó không XẤU. Tuy nhiên, nó chứng tỏ sức mạnh và tính linh hoạt của động cơ Razor.
Vì vậy, nếu bạn cần thêm thứ gì đó tùy ý hoặc ghi đè giá trị khác từ trình trợ giúp Razor hoặc không muốn tạo trợ giúp của riêng bạn, đối với một biểu mẫu sử dụng một số kết hợp dữ liệu bất thường, bạn có thể nhanh chóng sử dụng các phương pháp này để chấp nhận thêm dữ liệu.