0

彼ら!

私はこのViewModelを持っています:

public class ItemViewModel {
    [Display(Name="Has serie number?")]
    public bool HasSerieNumber { get; set; }
    public string SerieNumber { get; set; }
}

私はこのビューを持っています:

@Html.LabelFor(item => item.HasSerieNumber);
@Html.CheckBoxFor(item => item.HasSerieNumber);

@Html.TextBoxFor(item => item.SerieNumber);

そして、この JS コード:

$('#HasSerieNumber').click(function() {
    if ($(this).is(':checked')) {
        $('#SerieNumber').show();   
    } else {
        $('#SerieNumber').hide();
    }
});

HasSerieNumberチェックボックスをオンにすると、SerieNumberテキストボックスが表示されます。ビューでアイテムをチェックしたときに HasSerieNumber プロパティを起動/変更する方法はありますか? アイデアは、チェックボックスをオンにすると、プロパティの値が変更され、このプロパティを介してテキストボックスの可視性を制御できるということです。

ありがとう!

4

1 に答える 1

0

HasSerieNumberプロパティはチェックボックスにバインドされているため、コードは既にそれを行っています。チェックボックスをオンにすると、対応するコントローラ アクションHasSerieNumberとして が送信され、オフにすると が送信されます。また、チェックボックスがクリックされたときに、対応するテキストボックスの表示を効果的に切り替えています。truefalse

したがって、これをフォームでラップするだけです:

@using (Html.BeginForm("SomeAction", "SomeController"))
{

    @Html.LabelFor(item => item.HasSerieNumber)
    @Html.CheckBoxFor(item => item.HasSerieNumber)

    @Html.TextBoxFor(item => item.SerieNumber)

    <button type="submit">OK</button>
}

そして、フォームが次のコントローラ アクションに送信されたとき:

[HttpPost]
public ActionResult SomeAction(ItemViewModel model)
{
    ...
}

デフォルトのモデル バインダーのおかげで、モデルはリクエスト値から正しくバインドされます。HasSerieNumberおよびSerieNumberプロパティには値が含まれます。

于 2012-09-24T10:47:14.963 に答える