preserve动态生成的复选框的回发值 [英] Preserve dynamically generated check box's value on postback

查看:103
本文介绍了preserve动态生成的复选框的回发值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在我的在线注册申请中,我创建了两个模型如下图所示。 TeamModel用于存储有关团队和项目信息,同时MemberModel将包含有关团队成员的信息。

 公共类MemberModel
{
    [显示(名称=公司名称)]
        公共字符串MemberName {搞定;组; }    [显示(NAME =专业)]
        公共字符串专业{搞定;组; }    公共BOOL IsLeader {搞定;组; }
}公共类TeamModel
{
    [显示(NAME =队名)]
        公共字符串TeamName {搞定;组; }    [显示(名称=项目名称)]
        公共字符串项目名{获得;组; }
    [显示(名称=项目详情)]
        公共字符串ProjectDetails {搞定;组; }    公开名单< MemberModel> MemberModel {搞定;组; }}

一个团队可以包含任意数量内的成员,所以我采取了TeamModel MemberModel列表。 Intially而渲染模型我已经实例化MemberModel 5空白元。所以,在我看来,将有形式为5成员增加更多的成员链接。

现在,当用户在添加更多成员的链接,我会检查是否所有5行已经充满点击?如果是的话比我将使用jQuery添加一个新行。这两个功能得以实现如下。

  $(#AddMoreMember)。点击(函数(){
        VAR rowCount时= $(#tblOptions TR:GT(0))的长度。
        VAR MemberName =MemberModel [+ rowCount等+] .MemberName
        VAR MEMBERID =会员+ rowCount等;
        VAR专业=MemberModel [+ rowCount等+] .Speciality
        VAR SpecialityId =专业+ rowCount等;
        VAR IsLeader =MemberModel [+ rowCount等+] .IsLeader
        VAR LeaderId =领袖+ rowCount等;
        VAR标志= FALSE;
        对于(VAR I = 0; I< rowCount时,我++){
            VAR UserDetail =MemberModel_+ I +__MemberName
            VAR值= $(#+ UserDetail).VAL();
            如果(价值== NULL ||值==){
                标志=真实的;
            }
        }        如果(标志== FALSE){
            VAR名称标签='<输入类型=文本VALUE =的风格=宽度:200像素MAXLENGTH =1000NAME =+ MemberName +'ID =+ MEMBERID +'数据val-正则表达式纹=^ [^&放大器; LT;&放大器; GT;〜%^; / |] +数据-VAL-的regex ​​=^&放大器;放大器; LT;&放大器;放大器; GT;〜%; / | ';字符不选择数据-VAL =真正的类=输入验证错误&GT允许的;
            VAR SpecialityTag ='<输入类型=文本VALUE =的风格=宽度:200像素MAXLENGTH =1000NAME =+专业+'ID =+ SpecialityId +'数据val-正则表达式纹=^ [^&放大器; LT;&放大器; GT;〜%^; / |] +数据-VAL-的regex ​​=^&放大器;放大器; LT;&放大器;放大器; GT;〜%; / | ';字符不选择数据-VAL =真正的类=输入验证错误&GT允许的;
            VAR LeaderTag ='<输入类型=复选框VALUE =假的onclick =CheckDefault(本); NAME =+ IsLeader +'ID =+ LeaderId +'>';
            VAR HTML ='< TR>< TD align =left的风格=宽度:30%>' +名称标签+'< / TD>< TD align =left的风格=宽度:30%>' + SpecialityTag +'< / TD>< TD align =left的风格=宽度:30%>' + LeaderTag +'< / TD>< / TR>';
            $(#tblOptions TR:最后一个)后(HTML);
        }
    });    功能CheckDefault(OBJ)
    {
        VAR ID = $(OBJ).attr(ID);
        $(输入:复选框[ID * = MemberModel])各(。
            功能(){
                VAR radioID = $(本).attr(ID);
                如果(radioID!= ID)
                {
                    $(#+ radioID).prop(选中,FALSE);
                }
            }
        );
    }

现在,当我添加更多的行,并选择IsLeader复选框,它不是preserving它的价值,同时它得到回POST方法。

我应该怎么做才能属于动态生成的复选框的价值?


解决方案

  

我应该怎么做才能属于动态生成的复选框的价值?


阅读的 下面的文章 ,并使用非顺序索引动态生成的输入字段的名称。在这篇文章中桑德森史蒂芬说明了一个非常有用的帮手 Html.BeginCollectionItem 这将让你实现这个目标。

In my Online Registration application, I've created two models as below. TeamModel is used to store information regarding the team and project while MemberModel will contain information regarding the members of the team.

public class MemberModel
{
    [Display(Name = "Member Name")]
        public string MemberName { get; set; }

    [Display(Name = "Speciality")]
        public string Speciality { get; set; }

    public bool IsLeader { get; set; }
}

public class TeamModel
{
    [Display(Name = "Team Name")]
        public string TeamName { get; set; }

    [Display(Name = "Project Name")]
        public string ProjectName { get; set; }


    [Display(Name = "Project Details")]
        public string ProjectDetails { get; set; }

    public List<MemberModel> MemberModel { get; set; }

}

A team can contain any number of members within, so i've taken list of MemberModel in TeamModel. Intially while rendering the model i've instantiated MemberModel with 5 blank elements. So in my view there will be form for 5 members with "ADD MORE MEMBERS" link.

Now when user clicks in "ADD MORE MEMBERS" link i'll check whether all 5 rows has been filled ? if so than i will add one new row using jQuery. both functionality are achieved as following.

$("#AddMoreMember").click(function () {
        var rowCount = $("#tblOptions tr:gt(0)").length;
        var MemberName = "MemberModel[" + rowCount + "].MemberName";
        var MemberId = "Member" + rowCount;
        var Speciality = "MemberModel[" + rowCount + "].Speciality";
        var SpecialityId = "Speciality" + rowCount;
        var IsLeader = "MemberModel[" + rowCount + "].IsLeader";
        var LeaderId = "Leader" + rowCount;
        var flag = false;
        for (var i = 0; i < rowCount; i++) {
            var UserDetail = "MemberModel_" + i + "__MemberName";
            var value = $("#" + UserDetail).val();
            if (value == null || value == "") {
                flag = true;
            }
        }

        if (flag == false) {
            var NameTag = '<input type="text" value="" style="width:200px" maxlength="1000"  name="' + MemberName + '" id = "' + MemberId + '" data-val-regex-pattern="^[^&lt;&gt;~%^;/|]+" data-val-regex="^&amp;lt;&amp;gt;~%;/| characters are not allowed in option" data-val="true" class="input-validation-error">';
            var SpecialityTag = '<input type="text" value="" style="width:200px" maxlength="1000"  name="' + Speciality + '" id = "' + SpecialityId + '" data-val-regex-pattern="^[^&lt;&gt;~%^;/|]+" data-val-regex="^&amp;lt;&amp;gt;~%;/| characters are not allowed in option" data-val="true" class="input-validation-error">';
            var LeaderTag = '<input type="checkbox" value="false" onclick="CheckDefault(this);" name="' + IsLeader + '" id="' + LeaderId + '">';
            var html = '<tr><td align="left" style="width: 30%">' + NameTag + '</td><td align="left" style="width: 30%">' + SpecialityTag + '</td><td align="left" style="width: 30%">' + LeaderTag + '</td></tr>';
            $("#tblOptions tr:last").after(html);
        }
    });

    function CheckDefault(obj)
    {
        var id = $(obj).attr("id");
        $("input:checkbox[id*=MemberModel]").each(
            function(){
                var radioID = $(this).attr("id");
                if (radioID != id)
                {
                    $("#" + radioID).prop("checked",false);
                }
            }
        );
    }

now when I add more rows and select IsLeader checkbox, it's not preserving it's value while it gets back to the post method.

What should I do to pertain dynamically generated checkboxes value ?

解决方案

What should I do to pertain dynamically generated checkboxes value ?

Read the following article and use non-sequential indexes for the names of your dynamically generated input fields. In this article Steven Sanderson illustrates a very useful helper Html.BeginCollectionItem which would allow you to achieve that.

这篇关于preserve动态生成的复选框的回发值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆