2011-01-31 24 views
6

Hi,ASP.NET MVC 2 và liệt kê dưới dạng giá trị Ẩn?

Tôi có một lớp View có chứa một danh sách, danh sách này giải thích các tập tin có sẵn mà người dùng đã tải lên (trả lại với một helper html).

Để duy trì dữ liệu này trên trình tôi đã thêm dòng sau vào quan điểm:

<%: Html.HiddenFor(model => model.ModelView.Files)%> 

Tôi đã hy vọng rằng danh sách mode.ModelView.Files sẽ được trả lại cho hành động trên trình nhưng nó không phải là?

Không thể có danh sách là trường ẩn? thông tin

thêm:Các người sử dụng gửi một vài tập tin được lưu trên dịch vụ, khi Thầy lưu được giới thiệu đến như GUID và là danh sách này được gửi trả lại cho người sử dụng để làm cho hình ảnh được lưu. Người dùng thực hiện một số thay đổi trong biểu mẫu và nhấn gửi lại danh sách hình ảnh sẽ trống khi đến hành động kiểm soát, tại sao?

BestRegards

Trả lời

6

Há chẳng phải càng tốt để có một danh sách như HiddenField?

Tất nhiên là không thể. Trường ẩn chỉ mất một giá trị chuỗi duy nhất:

<input type="hidden" id="foo" name="foo" value="foo bar" /> 

Vì vậy, nếu bạn cần danh sách bạn cần nhiều trường ẩn, cho từng mục trong danh sách. Và nếu những mục đó là các đối tượng phức tạp, bạn cần một trường ẩn cho mỗi thuộc tính của từng mục trong danh sách.

Hoặc một giải pháp đơn giản hơn nhiều là dành cho lĩnh vực tiềm ẩn này để đại diện cho một số định danh duy nhất:

<input type="hidden" id="filesId" name="filesId" value="123" /> 

và trong hành động điều khiển của bạn, bạn sẽ sử dụng định danh duy nhất này để tìm nạp lại bộ sưu tập của bạn từ bất cứ nơi nào bạn bước đầu đã nhận nó.

Tuy nhiên, một khả năng khác là duy trì mô hình của bạn vào Session (chỉ đề cập đến Phiên vì tính đầy đủ của mục đích trả lời của tôi, nhưng đó không phải là điều tôi thực sự khuyên bạn nên sử dụng).

+0

Tại sao bạn không đề xuất Phiên?Đề xuất của bạn là gì để lưu trữ dữ liệu giữa các hành động? và làm cách nào để tôi nhận được số nhận dạng uniqe? – Banshee

+1

@SnowJim, dữ liệu đã được lưu trữ trong cơ sở dữ liệu của bạn. Vì vậy, chỉ cần truy vấn cơ sở dữ liệu để nạp lại dữ liệu. Tất nhiên để tránh nhấn cơ sở dữ liệu trên mỗi yêu cầu bạn có thể sử dụng bộ nhớ đệm, vv ... Tôi cố gắng để tránh phiên vì nó dẫn đến các ứng dụng stateful và ít khả năng mở rộng. Ví dụ, mặc định Session được lưu trữ trong bộ nhớ và khi bạn đang chạy trong một máy chủ, bạn sẽ cần phải tải nó xuống một số lưu trữ khác (máy chủ out-of-proc hoặc SAL). –

3

Trước khi bắt đầu, tôi chỉ muốn đề cập rằng đây là một ví dụ về một trong các giải pháp được đề xuất đã được đánh dấu là câu trả lời. Darrin đã hiểu đúng, đây là ví dụ về việc triển khai giải pháp được đề xuất ...

Tôi gặp vấn đề tương tự khi tôi cần lưu trữ danh sách chung loại int trong một trường ẩn. Tôi đã thử các apporach tiêu chuẩn đó sẽ là:

<%: Html.HiddenFor(foo => foo.ListOfIntegers) %> 

Điều đó sẽ gây ra và ngoại lệ. Vì vậy, tôi đã thử đề xuất của Darrin và thay thế mã ở trên bằng cách này:

<% 
foreach(int fooInt in Model.ListOfIntegers) 
{ %> 
<%: Html.Hidden("ListOfIntegers", fooInt) %> 
<% } %> 

Điều này làm việc như một sự quyến rũ đối với tôi. Cảm ơn Darrin.

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