首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >BeginCollectionItem()只给出PostBack的最后附加项

BeginCollectionItem()只给出PostBack的最后附加项
EN

Stack Overflow用户
提问于 2015-11-14 06:40:59
回答 1查看 239关注 0票数 0

InquiryOrderViewModel

代码语言:javascript
复制
public class InquiryOrderViewModel
{
    public InquiryOrder InquiryOrder { get; set; }
    public List<InquiryOrderDetail> InquiryOrderDetails { get; set; }
}

InquiryOrderIndex视图和添加项的脚本

代码语言:javascript
复制
@model eKnittingData.InquiryOrderViewModel
@using (Html.BeginForm("Save", "InquiryOrder"))
{
    <div id="editorRows">
        @foreach (var item in Model.InquiryOrderDetails)
        {
            Html.RenderPartial("_DetailEditorRow", item);
        }
    </div>
    @Html.ActionLink("Add another...", null, null, new { id = "addItem" })
    <div class="col-md-6">   <input type="submit" value="Save" class="btn btn-success" /> </div>
}

<script>
$('#addItem').click(function (e) {
    e.preventDefault();
    var isExist = false;
    $('.editorRow').each(function () {
        if ($(this).children('.class01').val() == 0 || $(this).children('.class02').find("option:selected").text() == "Select") {
            isExist = true;
            return false;
        }
    });
    if (isExist == false) {
        $('.editorRow').each(function () {
            $(".editorRow").children().attr("disabled", "disabled");
        });
        $.ajax({
            url: '@Url.Action("BlankEditorRow", "InquiryOrder")',
            cache: false,
            success: function (data) {
                $("#editorRows").append(data);
            }
        });
    }
});
</script>

DetailEditorRow PartialView

代码语言:javascript
复制
@model eKnittingData.InquiryOrderDetail
@using eKnitting.Helpers

@using (Html.BeginCollectionItem("InquiryOrderDetails"))
{
<div class="editorRow">
    @Html.DropDownListFor(a => a.ComponentId, (SelectList)ViewBag.CompList, "Select", new { Class = "class02" })
    @Html.DropDownListFor(a => a.DesignCodeId, (SelectList)ViewBag.DCodeList, "Select", new { Class = "class03" })
    @Html.TextBoxFor(a => a.NoOfParts, new { Class = "class01" })
    <a href="#" class="deleteRow">delete</a>        
</div>
}

ActionResult,返回PartialView

代码语言:javascript
复制
public ActionResult BlankEditorRow()
{
        var objContext = new KnittingdbContext();
        ViewBag.CompList = new SelectList(objContext.Components, "ComponentId", "ComponentName");
        ViewBag.DCodeList = new SelectList(objContext.DesignCodes, "DesignCodeId", "DesignCodeCode");

        return PartialView("_DetailEditorRow", new InquiryOrderDetail());
 }

ActionResult表示“GET”

代码语言:javascript
复制
        var objContext = new KnittingdbContext();

        var newIovm = new InquiryOrderViewModel();
        var newIo = new InquiryOrder();
        //initial item
        var newIoD = new List<InquiryOrderDetail>
        {
            new InquiryOrderDetail()
        };

        newIovm.InquiryOrder = newIo;
        newIovm.InquiryOrderDetails = newIoD;

        ViewBag.CompList = new SelectList(objContext.Components, "ComponentId", "ComponentName");
        ViewBag.DCodeList = new SelectList(objContext.DesignCodes, "DesignCodeId", "DesignCodeCode");

        return View(newIovm);

“POST”的ActionResult

代码语言:javascript
复制
public ActionResult Save(InquiryOrderViewModel inquiryOrderViewModel)
{
     .................
}

当我单击add按钮im可以动态添加项目。但是对于PostBack,它只给出最后附加的项。我在post ActionResult上设置了一个断点来检查它。我怎样才能获得PostBack的全部收藏?我哪里出错了?所有的帮助都很感激。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-14 06:55:16

您的脚本设置一个变量var isExist = false;。添加新项时,检查该值是否为false (如果达到此值的话),然后禁用所有现有输入。

禁用的窗体控件不会回发,因此只能获得最后添加的行的值。

不清楚为什么要禁用它们,但如果要阻止对现有行的编辑,请将它们设置为readonly

代码语言:javascript
复制
$(".editorRow").children().prop("readonly", true);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33705867

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档