Helpex - Trao đổi & giúp đỡ Đăng nhập
4

Những câu hỏi tương tự đã được hỏi một vài lần, nhưng tôi dường như không thể tìm ra câu trả lời.

Tôi đang nhập POSTmột số giá trị cho hành động của bộ điều khiển và tất cả các tham số đang được chuyển thành công dựa trên tên của chúng, ngoại trừ giá trị bool của hộp kiểm của tôi. Nó luôn luôn được thông qua như null.

Hình thức:

@using (Ajax.BeginForm("AddNote", "Home", FormMethod.Post, new AjaxOptions { OnSuccess = "function noteAdded();", OnFailure = "alert(xhr.responseText)" }))
{
    <!-- New Note Modal -->
    <div class="modal fade" id="note-add-modal" tabindex="-1" role="dialog" aria-labelledby="note-add-modal">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
                    <h4 class="modal-title" id="note-add-modal-Label">Add A Note</h4>
                </div>

              <div class="modal-body">
                  <textarea placeholder="Description..." class="form-control" rows="5" id="comment" name="comment"></textarea>
                  <textarea name="assignTo" id="assign-to" rows="1" class="form-control" placeholder="Assign To..." data-autocomplete-url="@Url.Action("AutoCompleteUsername")"></textarea>
                  <br/>
                  <label id="follow-up-date">Follow-Up Date: <input name="alertDate" class="form-control-date" placeholder="dd/mm/yyyy" id="datepicker" type="text" /></label>
                  <label class="complete-label">Complete:</label>
                  <input type="checkbox" id="complete" name="complete" checked="checked"/>
                  <label for="complete"></label>
              </div>
              <div class="modal-footer">
                  <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                  <button type="submit" id="note-form-submit" class="btn btn-primary">Save changes</button>
              </div>

            </div>
        </div>
    </div>

}

Hộp kiểm có tên: complete.

Hành động điều khiển:

[HttpPost]
public void AddNote(string comment, DateTime? alertDate, bool complete, string assignedTo)
    {
        // Unrelated Code
    }

Tôi nghĩ rằng bạn có thể chuyển trạng thái hộp kiểm cho bộ điều khiển dưới dạng giá trị bool thông qua tên. Hay là nhất thiết phải sử dụng @Html.Checkbox?

4 hữu ích 5 bình luận 2.1k xem chia sẻ
3

Ràng buộc sẽ kiểm tra value attributevì không có bất kỳ ràng buộc nào trong checkboxđó của bạn, nó sẽ luôn như vậy false. Một cách bạn có thể làm là lấy rõ ràng yêu cầu hiện tại completecủa bạn FormCollectionnhư sau:

public void Submit(bool test)
{
    var complete = Request.Form["complete"];
    //complete == null if checkbox was not checked
    //complete == "on" if checkbox was checked
}

Cách khác dễ dàng hơn là chỉ cần sử dụng @Html.Checkbox("complete")

3 hữu ích 0 bình luận chia sẻ
0

Nếu bạn thực hiện một vài thay đổi, tôi nghĩ bạn sẽ có nhiều thành công hơn. Tuy nhiên, nếu bạn thích hành động bộ điều khiển của mình có nhiều đối số thay vì một kiểu xem duy nhất, bạn có thể không thích giải pháp của tôi.

  1. Tạo một khung nhìn phức tạp thay vì có một số đối số lỏng lẻo. Đây có xu hướng được dễ dàng hơn để duy trì theo thời gian.

    public class Note 
    {
      public string Comment {get;set;}
      public DateTime? AlertDate { get; set; }
      public bool Complete { get; set; }
      public string AssignedTo { get; set; }
    }
    
  2. Thay đổi Hành động của bạn để sử dụng mô hình xem mới

    [HttpPost]
    public void AddNote(Note viewModel)
    {
        // Unrelated Code
    }
    
  3. Đặt @model của bạn trong CSHTML

    @model Company.Product.Note
    

Mặc dù Html.CheckBoxFor(x => x.Complete)là cách tiếp cận ưa thích, nhưng bạn vẫn có thể thực hiện HTML tương đương theo cách thủ công. Tuy nhiên, nếu mô hình xem thay đổi hoàn toàn, Html.CheckBoxForsẽ cung cấp cho bạn một lỗi có ý nghĩa hơn do tên không khớp.

HTH!

0 hữu ích 0 bình luận chia sẻ
loading
Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ c# ajax asp.net mvc asp.net-mvc-4 checkbox , hoặc hỏi câu hỏi của bạn.

Có thể bạn quan tâm

loading