gpt4 book ai didi

asp.net - 如何在mvc 2中将复杂数据作为模型从 View 传递到 Controller

转载 作者:行者123 更新时间:2023-12-04 06:25:36 24 4
gpt4 key购买 nike

我在数据库中有以下内容(我将它们用作模型):

Category
{
long id;
string name;
long subcategoryId;
}

Subcategory
{
long id;
string subName;
//other data
}

我使用 Entity SQL 从 db 获取数据,例如:
public static Category GetCategory(long catId)
{
Category cat;
using (Entities db = new Entities())
{
cat = (from c in db.Categories
where c.id == catId
select c).SingleOrDefault();

cat.SubcategoryReference.Load();
}
return cat;
}

现在,我有一些片面的看法:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<IEnumerable<Test.Database.Subcategory>>" %>
<%--Some code--%>
<%:Html.ActionLink("Move to new category", "editcategory", "category",
new { model = new Category { Subcategory = item } }, null)%>

计划是使用此操作链接导航到 CategoryController 和操作
public ActionResult EditCategory(Category model)
{
//some code
return View(model);
}

我可以在其中编辑有关此类别的一些信息,这些信息将包含所选的子类别。问题是我在此 EditCategory Action 中不断将 model=null 作为参数。我究竟做错了什么?欢迎任何建议。

最佳答案

您不能使用 GET 作为操作链接来传递复杂的对象。如果您想这样做,您将需要一个一个地发送所有属性,并让默认模型绑定(bind)器处理它,但这可能非常乏味:

<%: Html.ActionLink(
"Move to new category",
"editcategory",
"category",
new {
prop1 = item.Prop1,
prop2 = item.Prop2,
...
},
null
)%>

我会向您推荐标准的实现方法,其中包括传递您愿意编辑的类别 ID:
<%: Html.ActionLink(
"Move to new category",
"editcategory",
"category",
new { id = item.Id },
null
) %>

并在 Controller 操作中从存储库中获取相应的模型:
public ActionResult EditCategory(int id)
{
Category model = ... fetch category from id
//some code
return View(model);
}

然后相应的 View 将包含一个表单,其中包含所有不同类别属性的输入字段,并且您将提交此表单的 POST 操作可以将类别模型作为操作参数:
[HttpPost]
public ActionResult EditCategory(Category category)
{
if (!ModelState.IsValid)
{
return View(model);
}
// some code to update the category
return RedirectToAction("Success");
}

关于asp.net - 如何在mvc 2中将复杂数据作为模型从 View 传递到 Controller ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6072765/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com