我开始使用asp.net,当我尝试从表中编辑多个值时遇到了问题。我有一个书签表连接到另一个标签表,具有1:N的关系。我的问题是当我想编辑与现有网址相关联的现有标签时。我可以在页面上显示它们但是当我尝试发布编辑的数据时,我不知道如何在控制器中拾取它。到目前为止,我已经设法将它们作为字符串发回,但我怀疑这是解决方案,因为我必须稍后再次编辑所有数据。我想用已编辑的数据替换Tag表中的现有值。这是我的模型和控制器代码片段。
书签型号:
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();
}
Html代码:
@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 post 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)
{}
答案 0 :(得分:0)
不要理解为什么你这样做。我想建议你完全不同的方法。
第一:
在视图中创建一个包含所需字段的类。
第二:
在视图中使用此类作为MODEL
第三:
在控制器中,在POST函数中,将您的类作为该函数的唯一参数。