2010-05-17 32 views
5

Tôi đang làm việc trên biểu mẫu hiển thị thông tin về đơn hàng. Mỗi đơn đặt hàng có một id duy nhất, nhưng chúng không nhất thiết phải tuần tự trên biểu mẫu. Ngoài ra, số trường có thể thay đổi (một trường cho mỗi hàng trên biểu mẫu). Dữ liệu nhập vào biểu mẫu sẽ không được ánh xạ thẳng vào cơ sở dữ liệu, nhưng sẽ được thêm vào giá trị hiện tại trong cơ sở dữ liệu và sau đó được lưu. Ví dụ về biểu mẫu có trong hình bên dưới - chú thích ở bên phải hiển thị id cho mỗi hàng. Form exampleXử lý số biến của trường biểu mẫu

Tôi biết cách tạo biểu mẫu như thế này, nhưng tôi không thể tìm ra cách tôi có thể dễ dàng xử lý từng hàng này một cách đáng tin cậy. Tôi cũng biết cách cung cấp cho mỗi trường một số nhận dạng duy nhất, như name="order-23" hoặc name="order[23]", nhưng làm thế nào tôi có thể dịch tên đó để tôi có thể cập nhật bản ghi liên quan trong cơ sở dữ liệu?


EDIT: Một giải pháp tôi có thể nghĩ đến sẽ là để lặp qua mọi lĩnh vực hình thức trong FormCollection, và nếu tên của trường phù hợp với mô hình, sau đó tôi sẽ trích xuất số lượng từ mà tên trường và xử lý nó. Tuy nhiên, tôi cảm thấy rằng phải có một cách dễ dàng hơn để đi về nó - phương pháp này có khả năng liên quan đến một chút công bằng về xử lý chuỗi trên mỗi trường, và có thể sẽ kết thúc nếu tôi phải thêm các trường bổ sung cho mỗi hàng sau này.

+1

+1 cho giả lập, điều đó thật thú vị :) –

+2

@codeka - Tôi đã sử dụng chương trình Balsamiq - một chương trình tuyệt vời –

Trả lời

1

Bạn không có danh sách ID sau khi đăng lại? Tôi tin rằng bạn không nên phụ thuộc vào ID thực sự được gửi từ biểu mẫu, vì bất kỳ ai cũng có thể thay đổi ID trên biểu mẫu thành bất kỳ thứ gì họ muốn, vì vậy đó là vấn đề bảo mật. Vì vậy, bạn nên sau khi postback có một danh sách các ID bạn muốn cập nhật (cùng danh sách bạn đã sử dụng để tạo biểu mẫu). Trong trường hợp đó, bạn biết chính xác chuỗi id nào bạn nên sử dụng để lấy giá trị từ FormCollection.

Trong trường hợp bạn thực sự không thể lấy danh sách ID bạn sẽ cập nhật, chỉ cần sử dụng lặp lại FormCollection như bạn đã đề xuất trong nhận xét của mình. Việc xử lý chuỗi không phải là tốn kém trong so sánh với tất cả các công cụ khác đang được thực hiện tại xử lý yêu cầu.

+0

Tôi tin rằng tôi có thể nhận được danh sách các ID sau khi gửi lại (bằng cách truy xuất chúng ngay từ cơ sở dữ liệu). Nếu phương thức này hoạt động, tôi sẽ chỉ phải xem cách trích xuất trường bắt buộc từ 'FormCollection' và cập nhật nó - không quá khó. –

+0

Tôi đã làm một chút cả hai - tôi lấy từng đơn đặt hàng từ cơ sở dữ liệu, và sau đó sử dụng id thứ tự truy cập giá trị của nó trong FormCollection - Tôi dựa trên giải pháp của tôi một phần vào phương thức được trình bày trong http://stackoverflow.com/ câu hỏi/762825/how-can-a-formcollection-được-enumerated-in-asp-net-mvc/763952 # 763952 –

0

Nếu bạn có tên, sau đó chỉ cần đọc các giá trị bằng cách sử dụng Request.Form ["order-23"] hoặc tạo lại các điều khiển trong trang pre-init và bạn sẽ có quyền truy cập vào các giá trị trong lưu của bạn sự kiện trực tiếp thông qua các điều khiển được tạo.

0

Tôi đã thực hiện việc tải này trong CMS của mình.

Về cơ bản tôi sắp xếp bị lừa.

Ý tưởng là một cái gì đó như thế này ....

hiển thị biểu mẫu cho khách hàng, sau đó xem mã nguồn được nhập. Bạn sẽ thấy rằng nó tạo ra một thẻ biểu mẫu với một thuộc tính hành động.

Khi bạn nhấp vào nút gửi biểu mẫu sẽ được gửi đến địa chỉ đó như vậy trong trường hợp của một trình theo thứ tự bạn sẽ gửi trang trở lại OrderPage.aspx? OrderId = xxxx

sau đó trên máy chủ bạn sẽ xây dựng một báo cáo cập nhật cho db của bạn có chứa một cái gì đó giống như ...

"cập nhật đơn đặt hàng ở đâu để id =" + Request.QueryString [ "OrderId"]

vì vậy, làm thế nào để bạn cập nhật những hành động ...

Trong trang gọi điện thoại le ts cho biết bạn có liên kết được gọi là "Đơn đặt hàng mới", khi liên kết đó được nhấp, bạn cần phải làm 2 việc ...

  1. chuyển hướng đến trang này.
  2. tạo id đơn đặt hàng cho đơn đặt hàng mới này.

thì điều đầu tiên rất đơn giản, chỉ cần liên kết trang này với trang này.

giây ...

nếu trang này không phải là postback nếu (! IsPostback) {/ * nhận id mới * /} tùy thuộc vào id đơn đặt hàng của bạn, điều này có thể liên quan đến việc tạo một hướng dẫn mới hoặc thực hiện một số việc như nhận số tiếp theo trong danh sách làm một lựa chọn tối đa (id) từ một db.

khi bạn có id mới này, bạn vẫn phải ở trong sự kiện page_load.

this.form.Action = this.form.Action + "? OrderId =" + yourNewOrderId;

... tada ...

Gửi trang lại cho khách hàng.

xem nguồn.

+0

oh tôi quên thêm, khi trang này được đăng lại bởi người dùng nhấn nút gửi, nó sẽ gửi lại đến máy chủ và Request.QueryString ["OrderId"] sẽ chứa id đơn đặt hàng mới được tạo của bạn và các trường biểu mẫu được điền mà tất nhiên bạn xử lý theo cách thông thường. – War

+0

Tôi không hiểu làm thế nào điều này áp dụng cho tình hình của tôi - Tôi biết orderID là gì và làm thế nào để có được điều đó, nhưng tôi cần phải tìm ra giá trị của mỗi hàng trong số đó. Sau đó tôi phải lấy phần thích hợp (đồng trả lời cho hàng đó) từ cơ sở dữ liệu và cập nhật phần đó bằng giá trị mới. Tôi hiểu cách thức hoạt động của biểu mẫu - những gì tôi đang cố gắng hiểu là cách trích xuất các giá trị từ các hàng khi tôi không biết các hàng nào có ở đó. –

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