从主视图的局部视图发布数据然后提交给控制器

posting data from partial view on main view then submitting to controller

我有一个 MVC 模型如下

    public class ListSampleModel
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int SampleId { get; set; }

        public string FirstName { get; set; }

        public string LastName { get; set; }

        public IList<PointOfContact> lstPoc { get; set; }
    }

    public class PointOfContact
    {
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int PocID { get; set; }

        public string EmailAddress { get; set; }

        public string PhoneNumber { get; set; }
    }

我所做的是,在 jquery 对话框和 "save" 按钮上创建 "PointOfContact" 作为局部视图,单击它会在主视图的标签中显示数据(我将有多个联系人),现在提交时,我希望将此数据与 ListSampleData 的 属性 值一起发回控制器。 问题是,返回了与简单属性相关的数据,但列表始终为空。

下面是我的视图

@model MVCDataFlowSample.Models.ListSampleModel    
@using (Html.BeginForm("Create", "ListSample", FormMethod.Post))
    {
        @Html.AntiForgeryToken()
        @Html.ValidationSummary(true)

        <fieldset>
            <legend>ListSampleModel</legend>

            <div class="editor-label">
                @Html.LabelFor(model => model.FirstName)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.FirstName)
                @Html.ValidationMessageFor(model => model.FirstName)
            </div>

            <div class="editor-label">
                @Html.LabelFor(model => model.LastName)
            </div>
            <div class="editor-field">
                @Html.EditorFor(model => model.LastName)
                @Html.ValidationMessageFor(model => model.LastName)
            </div>
            <div id="dialog1" class="ui-dialog" style="background-color:gray;"></div>
            <div id="data">
            </div>
            <p>
                <input type="button" value="Add More..." id="btnAdd" />
            </p>
            <p>
                <input type="submit" value="Create" />
            </p>
        </fieldset>
    }

Javascript 在主视图上

<script type="text/javascript">
    $(document).ready(function () {
        $('#btnAdd').on('click', function () {
            $('#dialog1').dialog({
                autoOpen: true,
                position: { my: "center", at: "center", of: window },
                width: 1000,
                resizable: false,
                title: 'Add User Form',
                modal: true,
                open: function () {
                    $(this).load('@Url.Action("PocPartial", "ListSample")');
                },
                buttons: {
                    "Save User": function () {
                        addUserInfo();
                        $(this).dialog("close");
                    },
                    Cancel: function () {
                        $(this).dialog("close");
                    }
                }
            });
            return false;
        });
        function addUserInfo(email, phone) {
            var text = "<div id='EmailAddress'>Email Address:" + $("#EAddress").val() + "</div><div id='PhoneNumber'>Phone Number:" + $("#PhNo").val() + "</div>";
            $("#data").append(text);
        }
    });
</script>

局部视图

@model MVCDataFlowSample.Models.PointOfContact
<div>
        @Html.Label("EmailAddress:")
        <div>
            @Html.TextBoxFor(x => x.EmailAddress, new { id = "EAddress" })
        </div>

        @Html.Label("PhoneNumber:")
        <div>
            @Html.TextBoxFor(x => x.PhoneNumber, new { id = "PhNo" })
        </div>
</div>

任何帮助将不胜感激。

DIV 个元素的内容未作为表单数据提交。如果您希望提交该数据,请将其添加到 DOM 作为 DIV 之外的隐藏 INPUT 元素。您还需要正确格式化它们的名称,以便 MVC 知道如何绑定它们。请参阅 this article 了解如何在 MVC 中绑定复杂对象。

我post将部分视图数据编辑到主页的post操作您可以根据自己的喜好修改想法

局部视图

<select name="Country">
    <option>Indian</option>
    <option>Africa</option>
</select>

<select name="State">
    <option>Kerala</option>
    <option>TamilNadu</option>
</select>

<select name="City">
    <option>Thrissur</option>
    <option>Palakkad</option>
</select>

索引页

@{
    ViewBag.Title = "IndexTestPost";
}

<h2>IndexTestPost</h2>

@using(Html.BeginForm()){

    @Html.Partial("~/Views/_PartialPagePostCountry.cshtml");

<input type="submit" />
}

Class 捕捉 Post 数据

public class CountryCityState
{
    public string Country { get; set; }
    public string State { get; set; }
    public string City { get; set; }
}

控制器

public class TestPostPartialController : Controller
{

    // GET: TestPostPartial
    public ActionResult IndexTestPost()
    {
        return View();
    }

    [HttpPost]
    public ActionResult IndexTestPost(CountryCityState CtnCtySta)
    {
        return View();
    }
}