Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 请求。表单不返回任何值_C#_Html_Data Binding_Knockout.js_Request.form - Fatal编程技术网

C# 请求。表单不返回任何值

C# 请求。表单不返回任何值,c#,html,data-binding,knockout.js,request.form,C#,Html,Data Binding,Knockout.js,Request.form,我正在用HTML编写在线注册表格。一些字段是使用knockout.js中基于一组值的foreach数据绑定动态添加的。我已经完成了jquery部分,因此它将添加所有文本字段和集合 表单的动态部分如下所示: <div class="form_section" ID="FamilyMembers" style="display:none;" > <div class="wFamilyMember" data-bind="foreach: $root.fami

我正在用HTML编写在线注册表格。一些字段是使用knockout.js中基于一组值的foreach数据绑定动态添加的。我已经完成了jquery部分,因此它将添加所有文本字段和集合

表单的动态部分如下所示:

    <div class="form_section" ID="FamilyMembers" style="display:none;" >
        <div class="wFamilyMember" data-bind="foreach: $root.familyMembers" >
            <h2>Family Member <span data-bind="text: ($index() + 1)"></span> Information</h2>
            <div class='form_section'>
                <div class="eccform_column">
                    <div class="eccform_label">First Name*</div>
                    <div class="eccform_field"><input class="fmFirstName" title="First Name" type="text" data-bind="value:FirstName" /></div>
                </div>
                <div class="eccform_column">
                    <div class="eccform_label">Last Name *</div>
                    <div class="eccform_field"><input class="fmLastName" title="Last Name" data-bind="value:LastName"/></div>
                </div>
            </div>
            <div class="form_section">
                <div class="eccform_column">
                    <div class="eccform_label">Family Role*:</div>
                    <div class="eccform_dropdowns"><select class='fmFamilyRole' data-bind="options: $root.familyRoles, optionsText:'roleName', optionsValue:'value', value:FamilyRole"></select> </div>
                </div>
                <div class="eccform_column">
                    <div class="eccform_label">Age Group*:</div>
                    <div class="eccform_dropdowns"><select class='fmAgeGroup' data-bind="options:$root.ageGroups, optionsText:'groupName', optionsValue:'value', value:AgeGroup"></select></div>
                </div>
                <div class="eccform_checkbox_items">
                    <div class="eccform_checkbox"><input type="checkbox" class="fmLunchTicket" data-bind="checked: LunchTicket">Lunch Ticket ($5 for children, $10 for adults)</div>
                    <div class="eccform_checkbox"><input type="checkbox" class="fmSeminarTicket" data-bind="checked: SeminarTicket" >Seminar Ticket ($40)</div>
                </div>
            </div>
            <div class="form_section">
                <div class="eccform_column_button">
                    <button data-bind="click: $root.removeFamilyMember">Remove</button>
                </div>
            </div>
        </div>
        <button data-bind="click: $root.addFamilyMember">Add Family Member</button>
    </div>

    <div class="form_section" ID="Exhibitors" style="display:none;">
        <div class='wExhibitor' data-bind="foreach: $root.exhibitors">
            <h2>Exhibitor <span data-bind="text: $index() + 1"></span> Information</h2>
            <div class="eccform_section">
                <div class="eccform_column">
                    <div class="eccform_label">First Name*</div>
                    <div class="eccform_field"><input class="exFirstName" title="First Name" data-bind="value:FirstName" /></div>
                </div>
                <div class="eccform_column">
                    <div class="eccform_label">Last Name*:</div>
                    <div class="eccform_field"><input class="exLastName" title="Last Name" data-bind="value:LastName" /></div>
                </div>
            </div>
            <div class="eccform_section">
                <div class="eccform_column_exhibitor">
                    <div class="eccform_checkbox"><input type="checkbox" class="exLunchTicket" data-bind="checked: LunchTicket">Lunch Ticket ($10)</div>
                </div>
                <div class="eccform_column_exhibitor">
                    <div class="eccform_checkbox"><input type="checkbox" class="exSeminarTicket" data-bind="checked: SeminarTicket">Seminar Ticket ($40)</div>
                </div>
                <div class="eccform_column_removebutton">
                    <button data-bind="click: $root.removeExhibitor">Remove Exhibitor</button>
                </div>
            </div>
        </div>
        <button data-bind="click:$root.addExhibitor">Add Exhibitor</button>
    </div>
    <div class="form_section" ID="Exhibitors" style="display:none;">
        <div class='wExhibitor' data-bind="foreach: $root.exhibitors">
            <h2>Exhibitor <span data-bind="text: $index() + 1"></span> Information</h2>
            <div class="eccform_section">
                <div class="eccform_column">
                    <div class="eccform_label">First Name*</div>
                    <div class="eccform_field"><input id="exFirstName" runat="server" class="exFirstName" title="First Name" data-bind="value:FirstName,attr:{name: 'exFirstName_'+$index()}" /></div>
                </div>
                <div class="eccform_column">
                    <div class="eccform_label">Last Name*:</div>
                    <div class="eccform_field"><input id="exLastName" runat="server" class="exLastName" title="Last Name" data-bind="value:LastName, attr:{name: 'exLastName_'+$index()}" /></div>
                </div>
            </div>
            <div class="eccform_section">
                <div class="eccform_column_exhibitor">
                    <div class="eccform_checkbox"><input id="exLunchTicket" name="exLunchTicket" runat="server" type="checkbox" class="exLunchTicket" data-bind="checked: LunchTicket, attr: { name: 'exLunchTicket_' + $index() }">Lunch Ticket ($10)</div>
                </div>
                <div class="eccform_column_exhibitor">
                    <div class="eccform_checkbox"><input id="exSeminarTicket" name="exLunchTicket" runat="server" type="checkbox" class="exSeminarTicket" data-bind="checked: SeminarTicket, attr: { name: 'exSeminarTicket_' + $index() }">Seminar Ticket ($40)</div>
                </div>
                <div class="eccform_column_removebutton">
                    <button data-bind="click: $root.removeExhibitor">Remove Exhibitor</button>
                </div>
            </div>
        </div>
        <button data-bind="click:$root.addExhibitor">Add Exhibitor</button>
    </div>
int SomeKeys = Request.Form.AllKeys.Where(x=>x.StartsWith("exFirstName")).Count();

for (int i = 0; i < SomeKeys; i++)
{
    string FirstName = Request.Form["exFirstName_" + i];
    string LastName = Request.Form["exLastName_" + i];
    bool LunchTicket = Convert.ToBoolean(Request.Form["exLunchTicket_" + i]);
    bool SeminarTicket = Convert.ToBoolean(Request.Form["exSeminarTicket_" + i]);

    if (FirstName != "" && LastName != "")
        lFamilyMembers.Add(new FamilyMember(FirstName, LastName, SeminarTicket, LunchTicket, AgeGroup.Twenties, FamilyRole.Exhibitor));
}
问题在于,当我试图检索C中的值时,我似乎无法读取这些动态添加的值。我使用此代码读取以下值:

                List<string> oFirstNames = ConvertFromEnumerable(Request.Form.AllKeys.Where(x => x.StartsWith("exFirstName")));
                List<string> oLastNames = ConvertFromEnumerable(Request.Form.AllKeys.Where(x => x.StartsWith("exLastName")));
                List<string> oLunchTickets = ConvertFromEnumerable(Request.Form.AllKeys.Where(x => x.StartsWith("exLunchTicket")));
                List<string> oSeminarTickets = ConvertFromEnumerable(Request.Form.AllKeys.Where(x => x.StartsWith("exSeminarTicket")));

这在我以前使用javascript动态添加新元素时起作用,但现在不起作用。它总是返回null或空字符串集。我觉得我从一个完全错误的角度来处理这个问题,但我不知道什么是正确的角度。我是否应该找到一种从viewmodel获取数据的方法?有什么见解吗?

好的,解决方案很简单,只需将适当的名称附加到HTML DOM元素上。最终的HTML结果如下所示:

    <div class="form_section" ID="FamilyMembers" style="display:none;" >
        <div class="wFamilyMember" data-bind="foreach: $root.familyMembers" >
            <h2>Family Member <span data-bind="text: ($index() + 1)"></span> Information</h2>
            <div class='form_section'>
                <div class="eccform_column">
                    <div class="eccform_label">First Name*</div>
                    <div class="eccform_field"><input class="fmFirstName" title="First Name" type="text" data-bind="value:FirstName" /></div>
                </div>
                <div class="eccform_column">
                    <div class="eccform_label">Last Name *</div>
                    <div class="eccform_field"><input class="fmLastName" title="Last Name" data-bind="value:LastName"/></div>
                </div>
            </div>
            <div class="form_section">
                <div class="eccform_column">
                    <div class="eccform_label">Family Role*:</div>
                    <div class="eccform_dropdowns"><select class='fmFamilyRole' data-bind="options: $root.familyRoles, optionsText:'roleName', optionsValue:'value', value:FamilyRole"></select> </div>
                </div>
                <div class="eccform_column">
                    <div class="eccform_label">Age Group*:</div>
                    <div class="eccform_dropdowns"><select class='fmAgeGroup' data-bind="options:$root.ageGroups, optionsText:'groupName', optionsValue:'value', value:AgeGroup"></select></div>
                </div>
                <div class="eccform_checkbox_items">
                    <div class="eccform_checkbox"><input type="checkbox" class="fmLunchTicket" data-bind="checked: LunchTicket">Lunch Ticket ($5 for children, $10 for adults)</div>
                    <div class="eccform_checkbox"><input type="checkbox" class="fmSeminarTicket" data-bind="checked: SeminarTicket" >Seminar Ticket ($40)</div>
                </div>
            </div>
            <div class="form_section">
                <div class="eccform_column_button">
                    <button data-bind="click: $root.removeFamilyMember">Remove</button>
                </div>
            </div>
        </div>
        <button data-bind="click: $root.addFamilyMember">Add Family Member</button>
    </div>

    <div class="form_section" ID="Exhibitors" style="display:none;">
        <div class='wExhibitor' data-bind="foreach: $root.exhibitors">
            <h2>Exhibitor <span data-bind="text: $index() + 1"></span> Information</h2>
            <div class="eccform_section">
                <div class="eccform_column">
                    <div class="eccform_label">First Name*</div>
                    <div class="eccform_field"><input class="exFirstName" title="First Name" data-bind="value:FirstName" /></div>
                </div>
                <div class="eccform_column">
                    <div class="eccform_label">Last Name*:</div>
                    <div class="eccform_field"><input class="exLastName" title="Last Name" data-bind="value:LastName" /></div>
                </div>
            </div>
            <div class="eccform_section">
                <div class="eccform_column_exhibitor">
                    <div class="eccform_checkbox"><input type="checkbox" class="exLunchTicket" data-bind="checked: LunchTicket">Lunch Ticket ($10)</div>
                </div>
                <div class="eccform_column_exhibitor">
                    <div class="eccform_checkbox"><input type="checkbox" class="exSeminarTicket" data-bind="checked: SeminarTicket">Seminar Ticket ($40)</div>
                </div>
                <div class="eccform_column_removebutton">
                    <button data-bind="click: $root.removeExhibitor">Remove Exhibitor</button>
                </div>
            </div>
        </div>
        <button data-bind="click:$root.addExhibitor">Add Exhibitor</button>
    </div>
    <div class="form_section" ID="Exhibitors" style="display:none;">
        <div class='wExhibitor' data-bind="foreach: $root.exhibitors">
            <h2>Exhibitor <span data-bind="text: $index() + 1"></span> Information</h2>
            <div class="eccform_section">
                <div class="eccform_column">
                    <div class="eccform_label">First Name*</div>
                    <div class="eccform_field"><input id="exFirstName" runat="server" class="exFirstName" title="First Name" data-bind="value:FirstName,attr:{name: 'exFirstName_'+$index()}" /></div>
                </div>
                <div class="eccform_column">
                    <div class="eccform_label">Last Name*:</div>
                    <div class="eccform_field"><input id="exLastName" runat="server" class="exLastName" title="Last Name" data-bind="value:LastName, attr:{name: 'exLastName_'+$index()}" /></div>
                </div>
            </div>
            <div class="eccform_section">
                <div class="eccform_column_exhibitor">
                    <div class="eccform_checkbox"><input id="exLunchTicket" name="exLunchTicket" runat="server" type="checkbox" class="exLunchTicket" data-bind="checked: LunchTicket, attr: { name: 'exLunchTicket_' + $index() }">Lunch Ticket ($10)</div>
                </div>
                <div class="eccform_column_exhibitor">
                    <div class="eccform_checkbox"><input id="exSeminarTicket" name="exLunchTicket" runat="server" type="checkbox" class="exSeminarTicket" data-bind="checked: SeminarTicket, attr: { name: 'exSeminarTicket_' + $index() }">Seminar Ticket ($40)</div>
                </div>
                <div class="eccform_column_removebutton">
                    <button data-bind="click: $root.removeExhibitor">Remove Exhibitor</button>
                </div>
            </div>
        </div>
        <button data-bind="click:$root.addExhibitor">Add Exhibitor</button>
    </div>
int SomeKeys = Request.Form.AllKeys.Where(x=>x.StartsWith("exFirstName")).Count();

for (int i = 0; i < SomeKeys; i++)
{
    string FirstName = Request.Form["exFirstName_" + i];
    string LastName = Request.Form["exLastName_" + i];
    bool LunchTicket = Convert.ToBoolean(Request.Form["exLunchTicket_" + i]);
    bool SeminarTicket = Convert.ToBoolean(Request.Form["exSeminarTicket_" + i]);

    if (FirstName != "" && LastName != "")
        lFamilyMembers.Add(new FamilyMember(FirstName, LastName, SeminarTicket, LunchTicket, AgeGroup.Twenties, FamilyRole.Exhibitor));
}

您是否尝试过类似请求的方式。表单[exFirstName]我没有。它返回的是单个值还是数组?此表单可以向其中添加数量可变的人员,因此尝试只获取一个元素可能会有问题。在任何情况下,它都只会返回字段的值。也许使用Select而不是where会有所帮助?您是否尝试过查看Request.Form.AllKeys中的内容,看看是否有值。另外,在我看来,一个表单包含多个同名字段必然会产生问题。我认为在这种情况下,您必须使用id作为控件输入。您完全正确。我查看了旧代码,意识到我完全误用了这个函数。