如何使用强类型剃须刀的JQuery移动Flipswitch?

时间:2013-05-28 06:09:44

标签: asp.net-mvc jquery-mobile jquery-mobile-flipswitch

我想在登录页面中使用“记住我”选项的翻转开关。 发布表单时,视图模型的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开关?

1 个答案:

答案 0 :(得分:3)

本质上,翻转开关是一个带有“data-role =”slider“”html属性的下拉列表,只有两个选项。所以你可以像使用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并使用正确的值。

您可能会注意到数据通知是用下划线写的。普通破折号不会编译,但会在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)