2015-07-15 24 views
7

Tôi đang xây dựng một ứng dụng trang web sẽ có hai loại người dùng khác nhau, hãy gọi một số A và người kia là B. Họ có một số dữ liệu tương tự, chẳng hạn như: 'tên', 'mật khẩu', v.v. và phần còn lại là khác nhau. Tôi đã thực hiện 2 bảng cho riêng họ bởi vì tôi cần nó như thế, nhưng tôi có một ý tưởng và tôi không chắc liệu tôi có thể làm được không!ASP.NET - hai loại người dùng đăng ký trong một mẫu đăng ký?

Ý tưởng là khi người dùng truy cập Trang đăng ký, họ sẽ được hiển thị biểu mẫu đăng ký chứa dữ liệu tương tự giữa AB và sau đó tôi sẽ cho phép người dùng chọn hộp kiểm cho biết người dùng A hoặc người dùng B. Tùy thuộc vào những gì họ đã chọn, phần còn lại của biểu mẫu sẽ xuất hiện trong cùng một trang để cho phép họ tiếp tục đăng ký.

Tôi đang làm việc với ASP.NET trong C# và tôi tự hỏi liệu ý tưởng này có được áp dụng không? Vấn đề của tôi là với hộp kiểm - làm cách nào để cho phần còn lại của biểu mẫu đăng ký xuất hiện tùy thuộc vào những gì họ đã chọn, sau đó thêm nó vào bảng bên phải?

+1

Nút radio sử dụng tốt hơn để người dùng chỉ có thể chọn một nút. Nếu (radiobutton1.checked = true) // hiển thị người dùng một biểu mẫu else // hiển thị người dùng b biểu mẫu – missellorin

+0

ý tưởng của bạn thực sự có thể áp dụng. – dada

Trả lời

3

MVC?

2 tùy chọn:

Có cả hai biểu mẫu trong html của bạn, với ID thuộc tính = 'form a', 'form b'. Đảm bảo gửi biểu mẫu cho các hành động khác nhau. Hiện ẩn hoặc hình thức như thế này:

$('.radioBtn').click(function() { 
 
    var formType = $(this).val(); 
 
    //alert(formType); 
 
    if (formType == "A") { 
 
    $('#FormA').show(); 
 
    $('#FormB').hide(); 
 
    } else { 
 
    $('#FormB').show(); 
 
    $('#FormA').hide(); 
 
    } 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
 
<form style="display: none" id="FormA" action="/actionA"> 
 
    .... your html FORM A 
 
</form> 
 
<form style="display: none" id="FormB" action="/actionB"> 
 
    .... your html FORM B 
 
</form> 
 

 
<input type="radio" name="typeOfForm" class="radioBtn" value="A">Form A 
 
<input type="radio" name="typeOfForm" class="radioBtn" value="B">Form B

Ngoài ra, nếu bạn muốn hiển thị các hình thức chỉ không làm display: none bên trong biểu mẫu có một mà được thiết lập để không hiển thị cho đến khi người dùng lựa chọn.

-

HOẶC

Sử dụng ajax, có các hình thức của bạn như là quang cảnh một phần và tải chúng vào một div mục tiêu một lần radio được nhấp. (hãy cho chúng tôi biết nếu điều này là cần thiết)

Tôi nghĩ chương trình/ẩn đầu tiên là đủ cho trường hợp của bạn. Không có lý do gì để tải lên vì biểu mẫu chỉ là một bộ đầu vào trống.

EDIT

Tiếp theo, chúng ta nắm bắt những hình thức nộp trong điều khiển của bạn. Mỗi hình thức sẽ gửi cùng một hành động, hoặc bạn muốn các hành động khác nhau, điều này không tạo sự khác biệt - tùy chọn của bạn.

tùy chọn 1. Hình thức trên trang:

<form action='@Url.Action("YourRegisterAction", "controller")' > 
    <input type="hidden" name="FormType" value="A"/> <!--place B for B form--> 
    <input type="text" name="Name" placeholder ="enter your name"/> 
    <input type="text" name="Password" placeholder ="enter your name"/> 
    <input type="submit" value="Register Me!"/> 
</form> 

Bộ điều khiển

[HttpPost] 
    public ActionResult YourRegisterAction(char formType, string name, string password) 
    { 
     if (formType == 'A') 
      bool success = BL.Server.Instance.SaveMyNewUserToDBTypeA(name, password); 
     else if (formType == 'B') 
      bool success = BL.Server.Instance.SaveMyNewUserToDBTypeB(name, password); 

     return View("ThankYou", success); 
    } 

tùy chọn 2. Sử dụng các mô hình. Mô hình

 public class YourRegisterAction 
    { 
     public string Name { get; set; } 
     public string Password { get; set; } 
     public char FormType { get; set; } 
    } 

Quan điểm

@model Domain.UI.Models 
<form action='@Url.Action("YourRegisterAction", "controller")' > 
    @Html.HiddenFor(m=>m.FormType) 
    @Html.TextBoxFor(m=>m.Name) 
    @Html.TextBoxFor(m=>m.Password) 
<input type="submit" value="Register Me!"/> 
</form> 

Bộ điều khiển

 [HttpPost] 
    public ActionResult YourRegisterAction(RegisterViewModel m) 
    { 
     if (m.FormType == 'A') 
      bool success = BL.Server.Instance.SaveMyNewUserToDBTypeA(m.Name, m.Password); 
     else if (m.FormType == 'B') 
      bool success = BL.Server.Instance.SaveMyNewUserToDBTypeB(m.Name, m.Password); 

     return View("ThankYou", success); 
    } 

Sau khi bạn đã hình thức nộp trong điều khiển của bạn. Chỉ cần duy trì trong DB như bình thường.

Cũng vui lòng sử dụng @using (Html.BeginForm) thay vì thẻ biểu mẫu. Bạn có thể tìm thấy nhiều thông tin về điều này ở đây.

+0

cảm ơn câu trả lời của bạn nhưng tôi có một câu hỏi! Tôi vẫn còn nhầm lẫn ở đâu và làm thế nào tôi có thể gửi các dữ liệu nhập vào bảng bên phải? – user5067119

+0

một lần nữa chúng ta đang nói MVC? nếu có, tôi sẽ cập nhật câu trả lời treo trên. – Denys

+0

có nó là MVC .. xin lỗi tôi quên trả lời – user5067119

1

Giống như @Fel nói trên bình luận,

Bạn nên sử dụng tốt hơn các nút radio,

Hãy gọi họ là Rb1 và Rb2, nhóm các nút radio bởi cung cấp cho họ một groupname cùng.

Và cũng cung cấp cho AutoPostBack = "True" cho cả hai, Vì vậy, chỉ có bạn mới có thể thay đổi phần còn lại của trường trong khi radio được chọn.

Tạo phần còn lại của hình thức cho cả người dùng riêng biệt như Panels p1 cho A và p2 cho B

Trong trường hợp rb1_checkedchanged, show p1, Trong trường hợp rb2_checkedchanged, show p2

Khi nhấn Gửi nút

nếu (rb1.checked = true)

biểu mẫu hiển thị cho A; lưu trữ nó trong một Bảng cho A; else biểu mẫu hiển thị cho B; lưu trữ nó trong một Bảng cho B;

Hope this helps ... Tất cả các tốt nhất ...

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