asp.net mvc сохранить значение флажка в базу данных - PullRequest
2 голосов
/ 12 мая 2011

У меня есть простой проект MVC, состоящий из одной таблицы с именем Persons, и эта таблица имеет некоторые атрибуты, такие как имя, возраст, фамилия и т. Д.

Я недавно добавил в таблицу атрибут типа bit в SQL и bool в C #, и для меня он представляет некоторый статус. Если все в порядке, я ставлю этот статус в true или false.

В одном контроллере я создаю индексное представление моих людей в базе данных и отображаю статус в виде флажка. Это работает хорошо. То, что я хочу сделать, это изменить статус, если я нажму на этот флажок, вместо того чтобы использовать представление редактирования для всех атрибутов. Я просто хочу сохранить значение флажка из моего представления индекса в базе данных.

Некоторые люди советовали мне создать действие в моем контроллере следующим образом:

public ActionResult Save(int id, bool status){}

Где id - это id моей персоны в дБ, а status - это значение checkbox, на которое я нажал.

Так как мне вызвать эту функцию с помощью jquery, ajax или javascript и отправить эти параметры? Я не очень хорош в Ajax и немного боюсь этого:)

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

@Html.CheckBox("somename", item.Status)
        <input name="somename" type="hidden" value="false"/>

Любая помощь, совет или отправка меня в правильном направлении - это хорошо!

1 Ответ

2 голосов
/ 12 мая 2011

У вас есть несколько вариантов. Одним из способов было бы поместить флажки в (нормальную) форму, а затем использовать плагин jQuery Form для Ajaxify формы:

@using(Html.BeginForm()) {
    @Html.Checkbox(...)
}

<script type="text/javascript">
    $(document).ready(function () {
        $('form').ajaxForm({
            success: Saved,
            error: HandleError
        });
    });

    function Error(response, status, err) {
        // code to handle error here
    }

    function Saved(responseText, statusText, xhr, $form) {
        // code to handle succes, if any
    }
</script>

Конечно, вы также можете использовать @Ajax.BeginForm, но это дает преимущество в том, что он легко понижается. Просто удалите инициализацию формы jQuery, и вы получите обычную форму:)

Другая возможность - просто использовать @Ajax.ActionLink. Я написал сообщение в блоге о том, как бороться с Ajax.ActionLink, которое, я думаю, поможет вам.

Подпись для вашего действия контроллера по вашему вопросу выглядит правильно:

public ActionResult Save(int id, bool status){}

Другой вариант - на самом деле создать Settings модель представления (назовите ее как хотите), и там просто есть набор bool свойств для представления флажков:

public class Settings
{
    public bool Status { get; set; }
    // more properties here
}

тогда вы можете привязать свое действие к объекту настроек:

public ActionResult Save(int id, Settings settings){}

Это пригодится, если у вас будет несколько флажков для привязки.

...