Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.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# 如何在ASP.NET MVC中保存以表单编辑的多个模型?_C#_Asp.net Mvc_Entity Framework 4_Bulkinsert - Fatal编程技术网

C# 如何在ASP.NET MVC中保存以表单编辑的多个模型?

C# 如何在ASP.NET MVC中保存以表单编辑的多个模型?,c#,asp.net-mvc,entity-framework-4,bulkinsert,C#,Asp.net Mvc,Entity Framework 4,Bulkinsert,我需要做一个视图,它将支持批量插入对象。我正在实体框架4中使用存储库模式 由于视图中将有多个单独的模型,我如何处理将视图的模型绑定到发送到存储库的get 如何将表单中的输入值检索到控制器中 我已设法进行查看,但无法从控制器检索数据。我使用了下面的语句,但在post之后,它是nul public ActionResult AddPaymentForRoot_post(PaymentViewModelObject payments) { return null;

我需要做一个视图,它将支持批量插入对象。我正在实体框架4中使用存储库模式

由于视图中将有多个单独的模型,我如何处理将视图的模型绑定到发送到存储库的get

如何将表单中的输入值检索到控制器中


我已设法进行查看,但无法从控制器检索数据。我使用了下面的语句,但在post之后,它是nul

    public ActionResult AddPaymentForRoot_post(PaymentViewModelObject payments) {


        return null;

    }

我还没有使用EF,但我在我们的网站上有类似的要求。我通过将视图指定为继承
System.Web.Mvc.ViewPage
,然后使用for循环构建多个输入部分,利用允许模型绑定器构建可枚举项所需的命名约定来实现这一点

我更喜欢创建具有可枚举属性的视图模型(请参见下面的更新2)。在本例中,我们可以说它是
MyViewModel
对象,具有名为
MyModelObjects
IEnumerable
属性。在这种情况下,视图将显示如下

具体地说,请确保为每个输入部分包含一个名为
MyModelObjects.Index
的隐藏字段,然后将属性输入命名为
MyModelObjects[0].MyProperty
,其中
Index
隐藏字段的值对应于属性名称中的数组索引

您最终得到的结果如下所示,例如:

<div>
    <input type="hidden" name="MyModelObjects.Index" value="0" />
    Name: <input type="text" name="MyModelObjects[0].Name" /><br />
    Value: <input type="text" name="MyModelObjects[0].Value" />
</div>
<div>
    <input type="hidden" name="MyModelObjects.Index" value="1" />
    Name: <input type="text" name="MyModelObjects[1].Name" /><br />
    Value: <input type="text" name="MyModelObjects[1].Value" />
</div>
<div><a href="#" id="addItem">Add another item</a></div>
更新2
上面有一点错误-如果将视图键入到
IEnumerable
,则字段名将仅为
索引和
[0]。名称
/
[0]。值
。在我的实际应用程序中,我使用了一个视图模型,该模型的属性本身是可枚举的,因此我实际上将我的页面键入为
。在上面的示例中,该视图模型对象将具有一个名为
MyModelObject
的属性,该属性将是可枚举的(更现实地说,它被称为
MyModelObjects
复数)。

哇,我以前没有这样想过。这是个好主意。我没有尝试过,但逻辑对我来说是有意义的,并且非常确定它会起作用。你能给我一个关于jquery代码克隆模板输入部分的提示吗?顺便说一下,非常感谢。这对我来说意义重大。添加了代码。请记住,控制器必须接受模型,并且必须在集合中插入每个项目。
<div id="templateDiv" style="display: none;">
    <input type="hidden" name="MyModelObjects.Index" value="0T" />
    Name: <input type="text" name="MyModelObjects[0T].Name" /><br />
    Value: <input type="text" name="MyModelObjects[0T].Value" />
</div>
var currentIndex = 1 // if you were using this for editing, this would be dynamically set to the number of items you have
var doAddItem =
    function() {
        currentIndex++;
        var newItem = $("#templateDiv").clone();
        newItem.attr("id", "item" + currentIndex); // reset the ID here
        newItem.find("input[name=MyModelObjects.Index]").val(currentIndex);
        newItem.find("input[name$=.Name]").attr("name", "MyModelObjects[" + currentIndex + "].Name");
        newItem.find("input[name$=.Value]").attr("name", "MyModelObjects[" + currentIndex + "].Value");
        newItem.insertBefore($(this).closest("div")); // insert it before the div containing the add link...adjust appropriate to your layout
        return false;
    }

$(document).ready(function() {
    $("#addItem").click(doAddItem);
    // In a real-world app you'd probably want to have a delete option, too
});