0

我想在我的登录页面中为“记住我”选项使用翻转开关。发布表单时,视图模型的 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 属性的下拉列表,只有两个选项。因此,您可以像在 MVC Razor 中使用 DropDownList 一样使用它,使其强类型化/绑定到布尔值。

@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 util 一起使用(来源:Html helper for boolean values in asp.net mvc

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 回答