2011-05-12 105 views
2

我有一個簡單的mvc項目,由一個名爲Persons的表組成,表中有一些屬性,如名稱,年齡,姓氏等等。asp.net mvc將複選框值保存到數據庫

我最近給表中添加了一個屬性,它是SQL中的bit和C#中的bool,對我來說它代表了一些狀態。如果可以,我將該狀態設置爲true或false。

在一個控制器中,我創建了我的人員在數據庫中的索引視圖,並將狀態顯示爲複選框。這工作正常。我想要做的是改變狀態,如果我點擊該複選框而不是使用所有屬性的編輯視圖。 我只想將複選框值從我的索引視圖保存到數據庫。

有些人勸我,像這樣建立在我的控制器動作:

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

id是分貝我一個人的idstatuscheckbox我點擊的價值。

那麼如何使用jQuery,ajax或javascript調用該函數併發送這些參數? 我不與阿賈克斯和有點害怕的這麼好:)

還有一件事我設法從我DATABSE只有這樣corectly顯示checkbox值:

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

任何幫助或建議或派我去好的方向是好的!

回答

2

你有幾個選擇。一種方法是放置在一個(正常)形式的複選框,然後使用jQuery Form plugin來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。我寫了一個blog post on how to deal with 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){} 

這將派上用場,如果你最終有多個複選框綁定。

+0

使用ajax actionlink在我看來是不錯的選擇,所以我可以在我的複選框上設置ajax.action鏈接,然後調用操作併發送參數? 我正在閱讀您的博客文章,並試圖計算是否可以使用它與我的功能,在actionlink我可以發送ID和複選框值? – GoranB 2011-05-12 10:15:09

+0

@GoranB - 在這種情況下'ActionLink'的問題在於,您需要爲每個複選框*選擇一個「保存」鏈接*。如果你只有'status'複選框,這可能不會太糟糕,但如果你有更多的東西,可能會變得非常混亂。並且動態地傳遞複選框的值也會變得棘手,我在想... – 2011-05-12 10:27:37

+0

我有狀態,還有一個複選框也來自數據庫,所以如果你可以在複選框上寫一個actionlink的例子以及如何發送params? – GoranB 2011-05-12 10:39:52