2010-05-05 31 views
16

Cách tiêu chuẩn truyền và xử lý mảng trong yêu cầu HTTP trong .NET là gì? Tôi có một giải pháp, nhưng tôi không biết đó có phải là cách tiếp cận tốt nhất hay không.Truyền các giá trị mảng trong yêu cầu HTTP trong .NET

Đây là giải pháp của tôi:

<form action="myhandler.ashx" method="post"> 
    <input type="checkbox" name="user" value="Aaron" /> 
    <input type="checkbox" name="user" value="Bobby" /> 
    <input type="checkbox" name="user" value="Jimmy" /> 
    <input type="checkbox" name="user" value="Kelly" /> 
    <input type="checkbox" name="user" value="Simon" /> 
    <input type="checkbox" name="user" value="TJ" /> 

    <input type="submit" value="Submit" /> 
</form> 

Các handler ASHX nhận được "sử dụng" tham số như là một chuỗi dấu phẩy phân cách. Bạn có thể nhận các giá trị một cách dễ dàng thông qua việc tách chuỗi:

public void ProcessRequest(HttpContext context) 
    { 
     string[] users = context.Request.Form["user"].Split(','); 
    } 

Vì vậy, tôi đã có một câu trả lời cho vấn đề của tôi: gán nhiều giá trị với tên tham số tương tự, giả sử handler ASHX nhận nó như là một chuỗi dấu phẩy phân cách và chia chuỗi. Câu hỏi của tôi là có hay không đây là cách nó thường được thực hiện trong .NET.

Thực tiễn tiêu chuẩn cho việc này là gì? Có cách nào đơn giản hơn để lấy nhiều giá trị hơn giả sử rằng giá trị được phân tách bằng dấu phẩy và gọi Split() trên đó không? Đây có phải là cách mảng thường được truyền trong .NET hoặc XML được sử dụng thay thế không?

Có ai có bất kỳ thông tin chi tiết nào về việc đây có phải là cách tiếp cận tốt nhất không?

Trả lời

32

Không thực sự là tiêu chuẩn, nhưng những gì bạn đang sử dụng là gần nhất với nó.

Tuy nhiên, các giá trị thực tế là không phải là được gửi dưới dạng chuỗi được phân tách bằng dấu phẩy, chúng được gửi dưới dạng các giá trị riêng biệt có cùng tên. Các dữ liệu mẫu từ ví dụ của bạn sẽ trông như thế này:

user=Aaron&user=Bobby&user=Jimmy&user=Kelly&user=Simon&user=TJ 

Bạn có thể đọc các giá trị như một mảng trực tiếp như thế này:

string[] users = context.Request.Form.GetValues("user"); 

Nếu bạn sử dụng Form["user"] nó sẽ nối các giá trị cho bạn và bạn phải chia chúng lại. Đây chỉ là một sự lãng phí thời gian, và nó cũng phá vỡ nếu bất kỳ giá trị nào chứa dấu phẩy.

+0

Xin cảm ơn, đây chính là thông tin tôi đang tìm kiếm. Vì vậy, .NET Framework đủ thông minh để đọc các giá trị tham số HTTP có cùng tên với một mảng, và tôi có tùy chọn để lấy nó như một mảng thông qua GetValues ​​() hoặc như một chuỗi phân tách bằng dấu phẩy thông qua việc lập chỉ mục. –

+0

Thanks.Đó là rất hữu ích tôi đã nhận được danh sách usint đó. –

2

Nếu bạn đang sử dụng hộp kiểm hoặc hộp danh sách nhiều lựa chọn, thì tập hợp giá trị được phân cách bằng dấu phẩy là những gì bạn nhận được tự động từ html. Những gì bạn đang làm là hoàn toàn tốt đẹp. Nếu bạn tạo một mảng trong javascript của mình theo một cách khác, bạn có thể tạo chuỗi được phân tách bằng dấu phẩy và gán nó cho một trường ẩn và sử dụng split() trên máy chủ theo cách tương tự. XML chắc chắn là một lựa chọn khác, nhưng nó dường như phức tạp với tôi nếu tất cả những gì bạn muốn làm là truyền một mảng đơn giản hoặc các chuỗi ngắn. (Tất nhiên, nếu giá trị chuỗi bạn cần vượt qua chứa dấu phẩy, điều này sẽ làm hỏng kế hoạch đơn giản của bạn.)

+2

Không, bạn không nhận được các giá trị được phân tách bằng dấu phẩy từ biểu mẫu html. Đó là bộ sưu tập 'Request.Form' ghép các giá trị nếu bạn yêu cầu chúng như là một giá trị duy nhất. – Guffa

+0

Có - tất nhiên là bạn đúng. Thanx để làm rõ. Tôi đã đề cập đến cách các giá trị này thường được truy cập trong asp.net và tôi đã không giải thích sự chuyển đổi khung làm cho chúng ta. – Ray

+0

Cảm ơn lời khuyên. –

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