更新模型并在模型的集合属性中添加新项

时间:2015-05-22 17:59:15

标签: asp.net asp.net-mvc asp.net-mvc-5

有没有办法更新模型项目,同时还在同一时间向其中一个属性添加新项目?

我们说我有以下型号:

public class Article
{
    public string ArticleName { get; set; }
    public string ArticleText { get; set; }
    public virtual ICollection<ArticleNotes> ArticleNotes { get; set; }
}

public class ArticleNotes
{
    public string ArticleNote { get; set; }
}

以下观点:

@model MyApp.Models.Article
@using (Html.BeginForm("Article", "Article", FormMethod.Post))
{
    @Html.EditorFor(model => model.ArticleName)
    @Html.EditorFor(model => model.ArticleText)
    <button id="btnSave" name="Submit" type="submit"  value="Save" >Save</button>       
}

在同一视图中是否还有一种方法可以保存新的ArticleNote?

我知道我可以创建一个既包含Article属性又包含单独的ArticleNote属性的模型,但我想看看我是否可以做其他事情,因为我已经在Article中有了ArticleNote类型的集合。感谢。

3 个答案:

答案 0 :(得分:1)

您可以这样做,但ASP.NET期望以特定方式定义输入的名称。在您的情况下,您希望渲染的HTML看起来像:

<input type="text" name="ArticleNotes[0].ArticleNote" />

当此数据发送到服务器时,模型绑定将知道它是相关集合并填充模型。 An article by Phil Haack似乎仍然是此功能的权威来源。

答案 1 :(得分:1)

您可以执行以下操作:

@model MyApp.Models.Article
@using (Html.BeginForm("Article", "Article", FormMethod.Post))
{
    @Html.EditorFor(model => model.ArticleName)
    @Html.EditorFor(model => model.ArticleText)
    var noteInputName =  ViewData.TemplateInfo.GetFullHtmlFieldName("ArticleNotes") + "[0].ArticleNote";

    <input type-"text" name="@noteInputName" value=""/>
    <button id="btnSave" name="Submit" type="submit"  value="Save" >Save</button>       
}

答案 2 :(得分:1)

您可以执行以下操作:

@model MyApp.Models.Article

@{
int counter = 0;
}

@using (Html.BeginForm("Article", "Article", FormMethod.Post))
{
@Html.EditorFor(model => model.ArticleName)

@Html.EditorFor(model => model.ArticleText)

<input ArticleNotes[@counter]_ArticleNote" name="ArticleNotes[@counter].ArticleNote" value="" type="text" />

<button id="btnSave" name="Submit" type="submit"  value="Save" Save</button>       

}

您可以像使用

一样使用ArticleNotes属性
public virtual List<ArticleNotes> ArticleNotes { get; set; }

在文章类

希望这对你有帮助。