【问题标题】:MVC3: Binding models to dynamically created html elementsMVC3:将模型绑定到动态创建的 html 元素
【发布时间】:2012-06-28 16:41:03
【问题描述】:

我有一个模型,其中包含其他模型的列表,其中还包含其他模型类型的列表,例如:

public class Report
{
    public string ReportId {get; set;}
    public List<ReportOutput> ReportOutputs;
}

//output types = PDf, csv, txt, etc.
public class ReportOutput
{   
    public int OutputType {get; set;}
    public List<DeliveryMethod> DeliveryMethods;
}

//delivery methods = email, ftp, etc.
public class DeliveryMethod
{
    public string MethodName {get; set;}
}

我有一个使用 jQuery 根据这些对象的内容动态创建元素的视图。该视图允许用户选中复选框以添加或删除不同的输出,并在每个输出中使用不同的交付方法。我需要知道如何将信息返回到控制器以加载到模型中以发送回数据库。通过阅读,似乎我只需要在控制器中实例化一个模型,然后为视图中的每个元素指定一个与模型属性相对应的名称,然后调用控制器函数来检索所有数据并继续保存新填充的模型,但我创建此控制器功能的尝试失败了。

所以我的问题是,我将如何创建控制器函数,我是否只需要在 html 元素上使用相应的名称来允许根据视图上的信息创建模型?

【问题讨论】:

  • 是的,我之前已经走过这条路,您需要在创建元素时适当地命名元素,以便它们可以在回发时适当地进行数据绑定。

标签: c# asp.net-mvc asp.net-mvc-3 model-view-controller


【解决方案1】:

如果您在生成 name 表单字段时遵循以下模式,默认模型绑定器将负责其余的工作,否则您必须自己完成模型绑定过程(艰巨的工作!)。

报告ID,

ReportOutputs[0].OutputType,

ReportOutputs[0].DeliveryMethods[0].MethodName,

ReportOutputs[0].DeliveryMethods[1].MethodName,

ReportOutputs[1].OutputType,

ReportOutputs[1].DeliveryMethods[0].MethodName,

【讨论】:

  • 这看起来像是我需要做的,我唯一的问题是不知道编写控制器方法以实际接受值的正确方法。我会假设它是这样的: public ActionResult SaveReport() { } 但这需要一个 return 语句,我不确定要返回什么并让它保持在同一个视图上。
【解决方案2】:

您应该查看following article,它涵盖了这些主题并解释了默认模型绑定器期望的输入字段的命名约定,以便在提交表单时将它们绑定回来。

【讨论】:

    猜你喜欢
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 1970-01-01
    • 1970-01-01
    • 2014-10-15
    • 2016-08-13
    • 2013-08-18
    相关资源
    最近更新 更多