ASP.NET 移动视图中的 FormCollection 为空

Posted

技术标签:

【中文标题】ASP.NET 移动视图中的 FormCollection 为空【英文标题】:FormCollection Empty in ASP.NET Mobile View 【发布时间】:2017-02-11 11:45:49 【问题描述】:

当我将此代码用作 Web 视图时,它可以正常工作,但是当我在 Chrome 中使用开发人员选项时选择移动视图时,FormCollection 在控制器中显示空字符串

查看(编辑更新)

<div class="page product-details-page deal-product-details-page">
    @using (html.BeginForm("AddProductToCart_Details", "DealProduct", new  productId = Model.Id, shoppingCartTypeId = 1 , FormMethod.Post))
    
        <div class="page-body">

            @using (Html.BeginRouteForm("Product", new  SeName = Model.SeName , FormMethod.Post, new  id = "product-details-form" ))
            
                            @
                                var dataDictAttributes = new ViewDataDictionary();
                                dataDictAttributes.TemplateInfo.HtmlFieldPrefix = string.Format("attributes_0", Model.Id);
                                @Html.Partial("~/Views/Product/_ProductAttributes.cshtml", Model.ProductAttributes, dataDictAttributes)

                            
                            <!--gift card-->
                            @
                                var dataDictGiftCard = new ViewDataDictionary();
                                dataDictGiftCard.TemplateInfo.HtmlFieldPrefix = string.Format("giftcard_0", Model.Id);
                                @Html.Partial("~/Views/Product/_GiftCardInfo.cshtml", Model.GiftCard, dataDictGiftCard)

                            
                            <!--rental info-->
                            @
                                var dataDictRental = new ViewDataDictionary();
                                dataDictRental.TemplateInfo.HtmlFieldPrefix = string.Format("rental_0", Model.Id);
                                @Html.Partial("~/Views/Product/_RentalInfo.cshtml", Model, dataDictRental)

                            
                            <!--price & add to cart-->
                            @
                                var dataDictPrice = new ViewDataDictionary();
                                dataDictPrice.TemplateInfo.HtmlFieldPrefix = string.Format("price_0", Model.Id);
                                @Html.Partial("~/Views/Product/_ProductPrice.cshtml", Model.ProductPrice, dataDictPrice)


                                @Html.Partial("~/Views/Product/_ProductTierPrices.cshtml", Model.TierPrices)
                            
                            <!--wishlist, compare, email a friend-->

                                    <!--attributes-->
                                    @
                                        var item = @Model.AssociateProductAttributesList.Where(x => x.Item1 == data.Id).Select(x => x.Item2).ToList()[0];
                                        bool isAttributes =false;
                                    

                                    <div class="popup" data-popup="popup-@data.Id">
                                        <div class="popup-inner">
                                            <h2>@data.Name</h2>
                                            <p>@data.ShortDescription</p>

                                            <br />
                                            @foreach (System.Collections.DictionaryEntry value in item)
                                            
                                                var val = data.Id + "_" + value.Key.ToString();

                                                isAttributes = true;
                                                @*<div class="attributes">*@
                                                <dl>
                                                    <dt id="product_attribute_label_19">
                                                        <label class="text-prompt">
                                                            @value.Key.ToString()
                                                        </label>
                                                    </dt>
                                                    <dd id="product_attribute_input_19" class="product_attribute_inputdiv_@val">
                                                        @Html.DropDownList("Attributes," + data.Id + "," + value.Key.ToString(), new SelectList((System.Collections.IEnumerable)value.Value, "Id", "Name"), "--- Please select ---")

                                                    </dd>
                                                </dl>
                                                @*</div>*@
                                            
                                            <br />
                                            <div onclick="ImageBlur('div_@data.Id')" class="buttons" style="text-align:left;">
                                                <input class="button-1" data-popup-close="popup-@data.Id" type="button" value="Add to back" />
                                            </div>

                                            <a class="popup-close" data-popup-close="popup-@data.Id" href="#">x</a>
                                        </div>
                                    </div>
                                    @if (item.Count == 0)
                                    
                                        @Html.Hidden("Attributes," + data.Id + ",", "0")
                                        <div class="popup" data-popup="popup-@data.Id">
                                            <div class="popup-inner">
                                                <h2>@data.Name</h2>
                                                <p>@data.ShortDescription</p>


                                                <div onclick="ImageBlur('div_@data.Id')" class="buttons" style="text-align:left;">
                                                    <input class="button-1" data-popup-close="popup-@data.Id" type="button" value="Add to back" />
                                                </div>


                                                <a class="popup-close" data-popup-close="popup-@data.Id" href="#">x</a>
                                            </div>
                                        </div>
                                    



                                @if (isAttributes)
                                
                                    <a style="color: blue;" data-popup-open="popup-@data.Id" href="#">
                                        <img id="imgdiv_@data.Id" src="~/Themes/Playground/Content/img/dealselectattribut.png" class="select-atr-img" style="width: 50%; margin-bottom: 10px;"/>
                                    </a>
                                
                            </div>
                         


                    </div>

                    <div>

                    </div>
                    @
                        var dataDictAddToCart = new ViewDataDictionary();
                        dataDictAddToCart.TemplateInfo.HtmlFieldPrefix = string.Format("addtocart_0", Model.Id);
                        <div class="overview" style="width:100%; margin-left:auto">

                            @Html.Partial("~/Views/Product/_AddToCart.cshtml", Model.AddToCart, dataDictAddToCart)

                        </div>
                    


                </div>
                        

        </div>
                        
</div>

控制器

 public ActionResult AddProductToCart_Details(int productId, int shoppingCartTypeId, FormCollection form)
        

            if (_productService.IsDealProducts(productId))
            
                if (!IsCompleteSelected(form))
                
                    return Json(new
                    
                        success = false,
                        message = "    Plese select all associated product attribute    "
                    );
                
            
//more code here

普通视图(Web 视图)

移动端视图

【问题讨论】:

没有足够的信息来复制问题。您能否创建一个包含最少视图和控制器的新项目,以便我们复制它? 这是我第一次听到这样的问题。您可以发布完整的表单 HTML 代码 它很长...让我最小化它 我看到的是双重的还是你真的有一个表格在另一个表格里面?您知道 HTML 不允许这样做:***.com/a/555970/809357 正如@trailmax 所建议的那样-您在表单中嵌套了表单-或者在mvc术语中@using(Html.BeginForm... 在另一个@using(Html.BeginForm.. 块中),首先修复为有效html,然后如果您仍有问题,请更新问题(我怀疑您会:))。 【参考方案1】:

表格中的表格是不允许的。这是你的问题。

【讨论】:

但它在 webview 中工作正常,如果它是问题,它应该在甚至 web 中响应

以上是关于ASP.NET 移动视图中的 FormCollection 为空的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 设计视图 - 移动控件

我如何检测请求是不是来自我的 asp.net MVC 3 中的移动浏览器

下拉列表在 asp.net 的移动视图中不起作用

[转]在 ASP.NET MVC 4 中创建为移动设备优化的视图

ASP.NET MVC 4 的移动“选择器”此时是不是不可靠?

[八] ASP.NET CoreMVC 中的视图