0

ログイン ページの [Remember Me] オプションにフリップ スイッチを使用したいと考えています。フォーム投稿時、ビューモデルのRememberMeプロパティがフリップスイッチから値を取得しない。

モデルを見る:

public class LogOnViewModel
{
    private bool _RememberMe;

    /*some other properties here...*/       

    [DisplayName("Remember Me?")]
    public Nullable<bool> RememberMe
    {
        get 
        { 
            return (_RememberMe);
        }
        set
        {
            _RememberMe = (value ?? false);
        }
    }        
}

意見:

@model UI.Models.Authenticate.LogOnViewModel
@using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { data_ajax = "false" }))
{
    <div>
        <div data-role="fieldcontain">
            @Html.LabelFor(m => m.LoginUserName)
            @Html.TextBoxFor(m => m.LoginUserName)
        </div>
        <div data-role="fieldcontain">
            @Html.LabelFor(m => m.LoginPass)
            @Html.PasswordFor(m => m.LoginPass)
        </div>

            <select name="RememberMe.Value" id="Model.RememberMe.Value" data-role="slider">
                <option value="false">No</option>
                <option value="true" selected="">Yes</option>
            </select>



        <input type="submit" data-role="button" data-transition="none" value="Log on" />
    </div>

}

フォームの投稿後、RememberMe の値は常に false です。どのようにしてRememberMe Valueをfipスイッチに適切にバインドできますか?

4

1 に答える 1

3

基本的に、フリップ スイッチは、"data-role="slider"" html 属性と 2 つのオプションのみを持つドロップダウン リストです。したがって、MVC Razor で DropDownList を使用するのと同じ方法で使用して、厳密に型指定したり、bool にバインドしたりできます。

@Html.DropDownListFor(m => m.RememberMe, new List<SelectListItem>(){ new SelectListItem() { Text = "No", Value = "False" }, new SelectListItem() { Text = "Yes", Value = "True" }}, new { data_role = "slider" })

上記のコードは、RememberMe にバインドします。選択をサポートします (たとえば、RememberMe を true としてモデルを渡すと、はいが選択されます)。このメソッド/方法を他の JQuery モバイル コンポーネントでも使用できます。適切な値で最後に @data_role を追加するだけです。

data-notice がアンダースコアで書かれていることに気付くかもしれません。通常のダッシュはコンパイルされませんが、html でダッシュとして生成されます。簡単に再利用できるように、独自の Html ヘルパーを作成することをお勧めします。MVC プロジェクトでこのクラスを作成します。名前空間を保持すると、@Html ユーティリティで使用できなくなります (ソース: asp.net mvc のブール値の Html ヘルパー)

namespace System.Web.Mvc.Html
{
    public static class JqueryMobileExtension
    {
        public static MvcHtmlString FlipSwitchFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression)
        {
            ModelMetadata metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
            bool value = (bool)(metadata.Model ?? false);

            List<SelectListItem> items =
                new List<SelectListItem>()
                    {

                        new SelectListItem() { Text = "No", Value = "False", Selected = (!value) },
                        new SelectListItem() { Text = "Yes", Value = "True", Selected = (value) }
                    };

            return htmlHelper.DropDownListFor(expression, items, new { @data_role = "slider" });
        }
    }
}

そして、次のように使用できます。

@Html.FlipSwitchFor(m => m.RememberMe)
于 2013-05-31T08:54:55.497 に答える