ASP.NET MVC nhận giá trị đầu vào hộp văn bản


76

Tôi có một đầu vào hộp văn bản và một số nút radio. Ví dụ: HTML đầu vào hộp văn bản của tôi trông như thế này:

<input type="text" name="IP" id="IP" />

Khi người dùng nhấp vào nút trên trang web, tôi muốn chuyển dữ liệu đến bộ điều khiển của mình:

<input type="button" name="Add" value="@Resource.ButtonTitleAdd"  onclick="location.href='@Url.Action("Add", "Configure", new { ipValue =@[ValueOfTextBox], TypeId = 1 })'"/>

Có thể nó là tầm thường nhưng vấn đề của tôi là tôi không biết làm thế nào để lấy giá trị hộp văn bản và chuyển nó qua bộ điều khiển. Làm cách nào để đọc giá trị hộp văn bản và chuyển nó đến bộ điều khiển ipValue=@[ValueOfTextBox]?

Câu trả lời:


146

Mẫu đăng ký ASP.NET MVC đơn giản với hộp văn bản email sẽ được triển khai như vậy:

Mô hình

Dữ liệu từ biểu mẫu được ánh xạ tới mô hình này

public class SubscribeModel
{
    [Required]
    public string Email { get; set; }
}

Lượt xem

Tên chế độ xem phải khớp với tên phương thức bộ điều khiển.

@model App.Models.SubscribeModel

@using (Html.BeginForm("Subscribe", "Home", FormMethod.Post))
{
    @Html.TextBoxFor(model => model.Email)
    @Html.ValidationMessageFor(model => model.Email)
    <button type="submit">Subscribe</button>
}

Bộ điều khiển

Bộ điều khiển chịu trách nhiệm xử lý yêu cầu và trả về chế độ xem phản hồi thích hợp.

public class HomeController : Controller
{
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]
    public ActionResult Subscribe(SubscribeModel model)
    {
        if (ModelState.IsValid)
        {
            //TODO: SubscribeUser(model.Email);
        }

        return View("Index", model);
    }
}

Đây là cấu trúc dự án của tôi. Xin lưu ý, thư mục dạng xem "Trang chủ" khớp với tên HomeController.

Cấu trúc ASP.NET MVC


1
Và nếu tôi cần chuyển nhiều hơn một tham số ngoài giá trị hộp văn bản, chẳng hạn như một số để xác định loại thứ gì đó trong bộ điều khiển, thì phương pháp này có thể thực hiện được với phương pháp của bạn không? Nếu vậy, bạn có thể cho tôi biết làm thế nào?
Ralph

@AndreiMikhalevich bạn có thể cho một ví dụ với bài viết html không?
Koushik Saha

@ user3132179 sự khác biệt duy nhất là bạn cần đặt thuộc tính [HttpPost] vào một hành động và rõ ràng là sử dụng phương thức Đăng trong một biểu mẫu.
Andrei

1
Các C # Xem(m => m.FirstName), và các View và Controller@Html.TextBox("name"). "Tên" Html.TextBox có cần phải khớp với biến UserModel không? Nếu không, làm thế nào các giá trị trang này được ánh xạ tới thuộc tính đối tượng chính xác?
jp2code

25

Bạn có thể sử dụng jQuery:

<input type="text" name="IP" id="IP" value=""/>
@Html.ActionLink(@Resource.ButtonTitleAdd, "Add", "Configure", new { ipValue ="xxx", TypeId = "1" }, new {@class = "link"})

<script>
  $(function () {
    $('.link').click(function () {
      var ipvalue = $("#IP").val();
      this.href = this.href.replace("xxx", ipvalue);
    });
  });
</script>

17

Thử cái này.

Lượt xem:

@using (Html.BeginForm("Login", "Accounts", FormMethod.Post)) 
{
   <input type="text" name="IP" id="IP" />
   <input type="text" name="Name" id="Name" />

   <input type="submit" value="Login" />
}

Bộ điều khiển:

[HttpPost]
public ActionResult Login(string IP, string Name)
{
    string s1=IP;//
    string s2=Name;//
}

Nếu bạn có thể sử dụng lớp mô hình

[HttpPost]
public ActionResult Login(ModelClassName obj)
{
    string s1=obj.IP;//
    string s2=obj.Name;//
}

6

Một cách khác bằng cách sử dụng phương pháp ajax:

Lượt xem:

@Html.TextBox("txtValue", null, new { placeholder = "Input value" })
<input type="button" value="Start" id="btnStart"  />

<script>
    $(function () {
        $('#btnStart').unbind('click');
        $('#btnStart').on('click', function () {
            $.ajax({
                url: "/yourControllerName/yourMethod",
                type: 'POST',
                contentType: "application/json; charset=utf-8",
                dataType: 'json',
                data: JSON.stringify({
                    txtValue: $("#txtValue").val()
                }),
                async: false
            });
       });
   });
</script>

Bộ điều khiển:

[HttpPost]
public EmptyResult YourMethod(string txtValue)
{
    // do what you want with txtValue
    ...
}

2

bạn có thể làm điều đó rất đơn giản:

Đầu tiên: Ví dụ trong Mô hình, bạn có User.cs với triển khai này

public class User
 {
   public string username { get; set; }
   public string age { get; set; }
 } 

Chúng tôi đang chuyển mô hình trống cho người dùng - Mô hình này sẽ chứa đầy dữ liệu của người dùng khi anh ta gửi biểu mẫu như thế này

public ActionResult Add()
{
  var model = new User();
  return View(model);
}

Khi bạn trả về Chế độ xem bởi Người dùng trống dưới dạng mô hình, nó sẽ ánh xạ với cấu trúc của biểu mẫu mà bạn đã triển khai. Chúng tôi có điều này ở phía HTML:

@model MyApp.Models.Student
@using (Html.BeginForm()) 
 {
    @Html.AntiForgeryToken()

    <div class="form-horizontal">
        <h4>Student</h4>
        <hr />
        @Html.ValidationSummary(true, "", new { @class = "text-danger" })
        <div class="form-group">
            @Html.LabelFor(model => model.username, htmlAttributes: new { 
                           @class = "control-label col-md-2" })
            <div class="col-md-10">
                 @Html.EditorFor(model => model.username, new { 
                                 htmlAttributes = new { @class = "form-
                                 control" } })
                 @Html.ValidationMessageFor(model => model.userame, "", 
                                            new { @class = "text-danger" })
            </div>
        </div>

        <div class="form-group">
            @Html.LabelFor(model => model.age, htmlAttributes: new { @class 
                           = "control-label col-md-2" })
            <div class="col-md-10">
                @Html.EditorFor(model => model.age, new { htmlAttributes = 
                                new { @class = "form-control" } })
                @Html.ValidationMessageFor(model => model.age, "", new { 
                                           @class = "text-danger" })
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Create" class="btn btn-default" 
                 />
            </div>
        </div>
   </div>
}

Vì vậy, trên nút gửi bạn sẽ sử dụng nó như thế này

[HttpPost]
public ActionResult Add(User user)
 {
   // now user.username has the value that user entered on form
 }
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.