Свойство модели всегда получает ложное значение из флажка, даже если его проверка.данные JSON от AJAX вызова - PullRequest
3 голосов
/ 05 августа 2011

У меня есть форма, которая при отправке будет вызывать код ниже:

$.ajax({
        url: '/Company/CheckError',
        type: 'POST',
        data: JSON.stringify($(this).serializeObject()),
        dataType: 'json',
        processData: false,
        contentType: 'application/json; charset=utf-8',
        success: function (data) {
    }
});

, если мой флажок IsActive снят, я обнаружил, что он возвращает следующие данные json:

{"Email":"test@test.com","Name":"test","Phone":"","IsActive":"false","submitType":"","Id":"59"}

который я нашел естественным.Но если установлен флажок IsActive, он вернет эти данные json:

{"Email":"test@test.com","Name":"test","Phone":"","IsActive":["true","false"],"submitType":"","Id":"59"}

Теперь в моем контроллере

public ActionResult Method(SomeModel model)
{

}

другое свойство связывается просто отлично.Но модель. Isactive всегда ложная.Я думал, что MVC обрабатывает это правильно, связывая истинное значение, а не значение из скрытого ввода для флажка.

Я что-то упустил?Заранее спасибо за вашу помощь = ')

Ответы [ 2 ]

3 голосов
/ 05 августа 2011

Попробуй так:

Модель:

public class SomeModel 
{
    public bool IsActive  { get; set; }
}

Контроллер:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var model = new SomeModel();
        return View(model);
    }

    [HttpPost]
    public ActionResult Index(SomeModel model)
    {
        return Json(new { success = model.IsActive });
    }
}

Вид:

@model SomeModel

@using (Html.BeginForm())
{
    <div>
       @Html.LabelFor(x => x.IsActive)
       @Html.CheckBoxFor(x => x.IsActive)
    </div>
    <p><input type="submit" value="OK"></p>
}

<script type="text/javascript">
    $('form').submit(function () {
        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function (data) {
                alert(data.success);
            }
        });
        return false;
    });
</script>
1 голос
/ 04 февраля 2014

Добавьте следующее в ваш метод контроллера:

model.IsActive = model.IsActive.Contains("true");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...