Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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
Asp.net mvc 2 ASP.NET MVC 2.0:使POST操作接收我的模型';s子模型_Asp.net Mvc 2_C# 4.0 - Fatal编程技术网

Asp.net mvc 2 ASP.NET MVC 2.0:使POST操作接收我的模型';s子模型

Asp.net mvc 2 ASP.NET MVC 2.0:使POST操作接收我的模型';s子模型,asp.net-mvc-2,c#-4.0,Asp.net Mvc 2,C# 4.0,我试图重用一些现有模型(尤其是与它们相关联的加载/保存函数),因此我将它们聚合到当前模型中: public class EditModel { public SubModel1 {get; set; } public SubModel2 {get; set; } /* ID and some text fields */ } 问题是,在我填写表单并点击submit之后,在与POST相关联的操作中,这些子模型都有默认/空内容 /// POST for Edit [

我试图重用一些现有模型(尤其是与它们相关联的加载/保存函数),因此我将它们聚合到当前模型中:

public class EditModel {
    public SubModel1 {get; set; }
    public SubModel2 {get; set; }
    /* ID and some text fields */
}
问题是,在我填写表单并点击submit之后,在与POST相关联的操作中,这些子模型都有默认/空内容

/// POST for Edit
    [OutputCache(NoStore = true, Duration = 0, VaryByParam = "*")]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult EditCommunity(EditCommunityModel model) {
        if (bad stuff happened)
            return Json("Failure");
        //model.SubModel1 is != null, but all fields are empty.
        // ID and the aforementioned text fields come correctly.
        Save(model.ID, model.SubModel1, model.SubModel2);
        return Json("Succeeded");
    }
我以前在使用.aspx作为编辑等价物时,没有遇到过任何问题,因此会调用GET操作来正确构建模型。但现在我被限制在ascx上,因为我试图在模式对话框中进行编辑(如果有办法在div中加载一个aspx,那么这个问题就结束了;但我觉得这与aspx的用途相反。)

简而言之,这就是我要做的;我还将添加我尝试应用的两种策略,它们都具有相同的效果:空子模型

第一次尝试使用AJAX调用填充Edit.ascx。 在
Edit.ascx
中,Manage.aspx中包含了用于编辑对话框的包装器,并且在没有任何初始化的情况下传递了EditModel

    <div id="editDialog" style="display: none;">
         <% Html.RenderPartial("Edit", new EditModel()); %>
    </div>
第二次尝试尝试绕过
new EditModel()
,并使用控制器返回的视图。它确实实现了与第一次尝试完全相同的功能,代码明显减少,但在提交时遇到了相同的问题

 <div id="editDialog" style="display: none;"></div>
 <!-- ... -->
 function onSelectRowEdit_Click(id) {
        if (id) {
            //Get data from selected row
            var ret = jQuery("#table_communities").getRowData(id);
            //Show Edit community modal control
            var actionUrl2 = '<%= Url.Action("ShowEdit", "Manage",
                new { CommunityId="_COMMID_", ExternalId="_ORGID_" }) %>';
            editImg = editImg.replace("_COMMID_", ret.Id);
            editImg = editImg.replace("_ORGID_", ret.OrgID);
            $.ajax({
                type: "POST",
                url: actionUrl2,
                data: data,
                error: AjaxError,
                success: ShowRes
            });
        }
    }

不用说,
Edit.ascx
中的表单具有类似
m.SubModel1.EditProfile)%%>
的字段,因此这不是问题的根源。

尝试查看我在这个问题上的答案,看看这是否有帮助:

这篇文章及其依赖项都非常有趣;不幸的是,它不适用于我的情况:我的索引等价物(Basket)是
ShowEdit(stringcommunityid,stringexternalid)
;ModelState只包含这两个值,因此没有什么需要清除的(此外,它们是用于Edit.ascx目的的常量,因此它们实际上很有用)。但它确实向我指出了一个有趣的事实:在
editcomunity(editcommutymodel模型)
中,ModelState只包含Id和非子模型字段;在
ModelState[“SubModel1\u EditProfile”]
    function ShowRes(ret) {
        $("#form_Edit").validate();
        jQuery("#editDialog").dialog('destroy');
        Init_EditDialog();

        /* $('#...').val(ret...);, many times over */

        //Show Dialog
        $("#editCommunityDialog_Content").show();
        $("#editCommunityDialog").dialog('open');
    }
 <div id="editDialog" style="display: none;"></div>
 <!-- ... -->
 function onSelectRowEdit_Click(id) {
        if (id) {
            //Get data from selected row
            var ret = jQuery("#table_communities").getRowData(id);
            //Show Edit community modal control
            var actionUrl2 = '<%= Url.Action("ShowEdit", "Manage",
                new { CommunityId="_COMMID_", ExternalId="_ORGID_" }) %>';
            editImg = editImg.replace("_COMMID_", ret.Id);
            editImg = editImg.replace("_ORGID_", ret.OrgID);
            $.ajax({
                type: "POST",
                url: actionUrl2,
                data: data,
                error: AjaxError,
                success: ShowRes
            });
        }
    }
    function ShowRes(ret) {
        //...
        $("#editDialog_Content").html(ret);
        //Show Dialog
    }