编辑数据和模型绑定时出现问题

本文关键字:问题 定时 绑定 数据 模型 编辑 | 更新日期: 2023-09-27 18:36:59

我开始使用 asp.net,当我尝试从表中编辑多个值时遇到了问题。我有一个书签表,它连接到另一个标签表,具有 1:N 关系。我的问题是当我想编辑与现有 url 关联的现有标签时。我可以在页面上显示它们,但是当我尝试发布编辑后的数据时,我不知道如何在控制器中选取它。到目前为止,我已经设法将它们作为字符串发送回去,但我怀疑这是解决方案,因为我稍后必须再次编辑所有数据。我想用编辑后的数据替换标签表中的现有值。以下是我的模型和控制器代码片段。

书签模型:

public int id { get; set; }
public string url { get; set; }
public virtual ICollection<Tag> tags { get; set; }

标签型号:

public int id { get; set; }
public string name { get; set; }
public virtual Bookmark bookmark { get; set; }
public string user { get; set; }

控制器:

public ActionResult Edit(int id)
{
    var editBookmark = adc.Bookmarks.Single(x => x.id == id);
    var query_where2 = from a in adc.Tags
                       where a.bookmark.id == id
                       select a;
    BookmarkTag bkTag = new BookmarkTag();
    bkTag.bookmark = new List<Bookmark>();
    bkTag.bookmark.Add(editBookmark);
    bkTag.tag = query_where2.ToList();
    return View(bkTag.tag);
}
//
// POST: /SavedBookmark/Edit/5
[HttpPost]
public ActionResult Edit(int id, ICollection<FormCollection> tag)
{
    try
    {
        return View();
    }
    catch
    {
        return View();
    }

网页代码:

@using (Html.BeginForm("edit", "SavedBookmark"))
{
    @Html.AntiForgeryToken()
    if (Model != null) {
        var aa= Model.First();
        @Html.TextBox("test2", aa.bookmark.url);
        List<BookIT2.Models.Tag> allTags = new List<BookIT2.Models.Tag>();
        allTags = Model.ToList();
        for (int i = 0; i < allTags.Count; i++)
        {
            if (!allTags[i].name.IsEmpty())
            {
                @Html.TextBox(allTags[i].name, allTags[i].name);
                @Html.Hidden(allTags[i].id.ToString(), allTags[i].id);
                @Html.Hidden(allTags[i].user, allTags[i].user)
                @Html.Hidden(allTags[i].bookmark.id.ToString(), allTags[i].bookmark.id.ToString())
            }
        }

    @Html.Label("Additional tag")
    @Html.TextBox("additionalTag")
    <input type="submit" value="edit" />
}

简而言之:我无法在 http 后 ICollection 中获得任何值,它总是为空。

以下是更新的代码:

@using (Html.BeginForm("edit", "SavedBookmark"))
{
    @Html.AntiForgeryToken()
    if (Model != null)
    {
        for (int i = 0; i < Model.tag.Count; i++)
        {
            if (!Model.tag[i].name.IsEmpty()) { 
            @Html.Hidden(Model.tag[i].id.ToString(), Model.tag[i].id);
            @Html.Label("name");
            @Html.TextBox(Model.tag[i].name, Model.tag[i].name);
            @Html.Hidden(Model.tag[i].bookmark.id.ToString(), Model.tag[i].bookmark.id);
            @Html.Hidden(Model.tag[i].user, Model.tag[i].user);
}
        }
        @Html.TextBox(Model.bookmark.id.ToString(), Model.bookmark.url);
        <input type="submit" value="edit" />
    }
}

型号类别:

public class TestBookmark
{
    public Bookmark bookmark{get; set;}
    public List<Tag> tag {get; set;}
}
[HttpPost]
public ActionResult Edit(TestBookmark edit)
{}

编辑数据和模型绑定时出现问题

真的不明白你为什么要这样做。我想建议你完全不同的方法。第一:
创建一个类,其中包含视图中所需的所有字段。
第二:
将此类用作视图中
的模型第三:
在控制器中,在 POST 函数中,您的类作为该函数的唯一参数。