2012-03-10 10 views
2

イムHtmlHelper.CheckBoxチェックボックスを返す「真、偽」の代わりに選択した値のformcollectionから

とを使用して、私のaspxページ内に複数のチェックボックスを持つフォームは、JSファイルに以下のようにAJAXを使用して送信されたときに var input = $(':input');

$.ajax({ 
    type: 'POST', 
    url: "/Home/Post", 
    data: input, 
    dataType: 'json', 
    success: function() { 

    }, 
    }); 

とコントローラアクションメソッドで以下に示すように..

public ActionResult Post(FormCollection Form) 
{ 

} 

とフォームイムに取得していませんチェックボックスの更新値、つまりすべてのチェックボックスの値は "true、false"として返された でした。 チェックボックスのいずれかがチェックされていないかチェックされていない場合...フォームがfalseとして返されない場合でも、falseの代わりに "true、false"が返されます。

でも私は

Form.Get("checkbox0").ConvertTo(typeof(Boolean)) 

Request.Form["checkbox0"] 

として試み.... aboceコードが「真偽」を返しますが、それは起きていないされてfalseを返す必要がありますので、checkbox0はオフになっています?

しかし、私は、JSファイル内のaspxファイル と削除AJAX呼び出しでHtml.BeginForm("Post","Home",FormMethod.Post,new {id="x"}) ... を使用しようとしたとき、コントローラでformcollectionは私のチェックボックスの期待値を与える開始... しかし、このアプローチのちらつきなどページ後のページには、

は私がAJAXを使用しているとき、私はformcollectionから、チェックボックスの更新された値を取得する方法を教えてください..私はAJAXのアプローチだけを使用する必要が...提出します。

答えて

3

このようにしてみてください。

$.ajax({ 
    type: 'POST', 
    url: '/Home/Post', 
    data: $('form').serialize(), 
    dataType: 'json', 
    success: function() { 

    }, 
}); 

そしてまた、私はビューモデルを使用して、あなたをお勧めします:

たとえば、あなたが値のリストを持っている
[HttpPost] 
public ActionResult Post(MyViewModel model) 
{ 
    ... 
} 

public class MyViewModel 
{ 
    public ItemViewModel[] Items { get; set; } 
} 

public class ItemViewModel 
{ 
    public int Id { get; set; } 
    public bool IsSelected { get; set; } 
} 

厳密に型指定されたビューでチェックボックスのリストを生成した:

<% for (var i = 0; i < Model.Items.Length; i++) { %> 
    <%= Html.HiddenFor(x => x.Items[i].Id) %> 
    <%= Html.CheckBoxFor(x => x.Items[i].IsSelected) %> 
<% } %> 
+0

私はHtml textbox、Dropdown ...のような他のコントロールを持っています...同じように扱うことができることを教えてください。 – shiv455

+0

@ user1065358あなたはビューモデルに対応するプロパティを追加するだけです。クロムの –

11

あなたはいつもこれを試みることができる:

bool checkedValue = Form["checkbox0"].Contains("true"); 
+0

私は "真"の代わりに "オン"になる??? – Jaider

+0

私はこれも気付きました。これは以前のバージョンのIEでこれが起こっているのを見たことがありますか(あるいはJavaScriptを使用していたのでしょうか?)どちらの場合も、両方のシナリオの説明方法が分からない場合、 ( "true")|| fc ["checkbox0"]。Contains( "on"))?true:チェックボックスの値がfalseの場合、偽); – Losbear

+0

ありがとう@Trentそれは私の仕事です! –

1

が、これは

string abc = ((string[])(collection.GetValue("checkbox0").RawValue))[0]; 
-1

私も同じ問題に直面して、下記のリンク http://www.mindstorminteractive.com/topics/jquery-fix-asp-net-mvc-checkbox-truefalse-value/

$(window).load(function() { 
    $("input:checkbox").each(function() { 
     fixHiddenCheckField(this); 
    }); 

    $("input:checkbox").change(function() { 
     fixHiddenCheckField(this); 
    }); 
}); 

function fixHiddenCheckField(checkField) { 
    var name = $(checkField).attr("name"); 
    var hiddenSelector = "input:hidden[name=" + name + "]"; 
    var checkBoxesInListSelector = "input:checkbox[name=" + name + "]"; 
    var checkedCheckBoxesInListSelector = "input:checked[name=" + name + "]"; 

    if ($(checkedCheckBoxesInListSelector).length >= 1 || $(checkBoxesInListSelector).length > 1) { 
     $("input").remove(hiddenSelector); 
    } 
    else { 
     if ($(hiddenSelector).length == 0) 
      $(checkField).parents("form").append("<input type='hidden' name='"+name+"' value='false' />"); 
    } 
} 

出くわし試しくださいブログでは、上記のコードでは、ボックスをチェックするときに隠しフィールドを削除し、未チェックのときに親フォームに重複して追加します。リストを処理するには、チェックボックスの合計長をこの名前でチェックします。複数ある場合は、これがリストであるとみなされるため、隠しフィールドを削除します。単一のfalse値を生成するためにチェックされていないリストが必要な場合は、if文で$(checkBoxesInListSelector).length> 1をチェックしないでください。

関連する問題