2012-04-24 72 views
0

Webグリッドの列にチェックボックスを追加しようとしていますが、Html.CheckBoxを使用してレンダリングするのは難しいです。入力型= "チェックボックス"を使用するとレンダリングされますが、ビューモデルに値を保存することはできません。MVC3 WebGrid CheckBox

私は2つのwebGridを持っている複雑なビューを持っていて、一方のアイテムを選択してもう一方に移動すると、grid1に移動すると、必要に応じて各行に対してボックスをチェックできます。保存するチェックボックスの値を取得できないことを除いて、すべてが機能しています。

チェックボックスがあり、私のグリッドのためのコードは次のようになります。

var grid1 = new WebGrid(source: Model.FieldsInTemplate, canSort: false, defaultSort:"FieldName"); 

    @grid1.GetHtml(headerStyle:"gridGroupRow", tableStyle: "gridGroup", rowStyle: "gridRow", alternatingRowStyle: "gridRowAlt", columns: grid1.Columns(
     grid1.Column("FieldName", "Field Name"), 
     grid1.Column(header: "Required", format: @<text><input name="IsRequired" type="checkbox" value="@item.IsRequired" /></text>), 
     grid1.Column(format: (item) => new HtmlString("<a href='#' id='test' onclick='updateTemplate(false," + item.FieldId.ToString() + ");'>Remove</a>")) 
      )) 

ので、上記を使用して、グリッドは、チェックボックスを描画しますが、提出に実体は常にfalseです。ビューは、ののViewModelを使用しています。

public class TemplateFieldInteractViewModel 
{ 
    public IList<MetadataTemplateFieldInstanceDisplayViewModel> FieldsInTemplate 
    { 
     get; 
     set; 
    } 

    public IList<MetadataTemplateFieldInstanceDisplayViewModel> FieldsNotInTemplate 
    { 
     get; 
     set; 
    } 
} 

MetadataTemplateFieldInstanceDisplayViewModelは、次のようになります。

public class MetadataTemplateFieldInstanceDisplayViewModel 
{ 
    public int FieldId {get;set;} 

    public string FieldName {get;set;} 

    public bool IsRequired {get;set;} 
} 

私はここに新たなんだ、と過負荷にしたくない、これは少し曖昧である場合は私に知らせてくださいあまりにも多くの不要なコードを使用しています。

乾杯

マーク

+0

私はWebGridを使用していませんが、常にfalseに設定されている余分な隠しフィールドを生成するHtml.CheckboxForと同じことをする可能性があるという疑いがあります。それは問題の原因となっているかもしれません - http://stackoverflow.com/questions/2697299/asp-net-mvc-why-is-html-checkbox-generating-an-additional-hidden-input – StuartLC

答えて

3

それは「確認」またはいない場合は、チェックボックスの値が決定するものではありません。 checked = "checked"を使用する必要があります。

私は100%剃刀で学んだが、ここでは試みだいないよ:

<input name="IsRequired" type="checkbox" @if(item.IsRequired) { <text>checked="checked"</text>} value="@item.IsRequired" /> 

これはあなたの問題を解決していますか?

+0

残念ながら、これは問題を解決しませんでした。しかし、試みに感謝します。これは、「IsRequiredがチェックされている場合は、チェックボックスをオンにしてください」と言っているようです。最初にグリッドがロードされると、このフィールドは常にfalseになります。したがって、必要に応じてユーザーがチェックします。 – Mark

+0

ええ、私はいつもオブジェクトの "リスト"に問題がありました。投稿はどのように見えますか? –

+0

これは、行がすでにチェックボックスがオンになっていて、更新ビューに入っている場合、その動作(実行時にチェックされたフィールドを表示)です。ただし、提出すると、(実行時に変更しなくても)以前にチェックされたフィールドはチェックされなくなります。 – Mark

0

私はこの私が望んでいた方法を行う方法を考え出し:

grid.Column("Select", header: "", format: (item) => @Html.Raw("<a href='" + item.GetSelectUrl() + "' /><img src='" + ((grid.SelectedRow == item) ? "../../Content/images/AdminSelect-ON.png" : "../../Content/images/AdminSelect-OFF.png") + "' />")), 
1

あなたがそうのような列を宣言した場合:

grid.Column("Select", "Select", format: @<input type="checkbox" name="selectedrows" value="@item.WedNo" />) 

を、あなたのアクションであなたにフォームポストはこれらにアクセスすることができます選択された項目は次のようになります。

ここでは、選択されたすべてのチェックボックスがチェックされています。

関連する問題