Asp.net mvc 在ASP.MVC中发送表单数据
我有一张如下的表格。当我发送表单时,数据(id、content、gdate)到达post-ActionResult。然而,一个字段(名为“category”)在post端得到null。缺失的部分是什么 BlogPost模型:Asp.net mvc 在ASP.MVC中发送表单数据,asp.net-mvc,Asp.net Mvc,我有一张如下的表格。当我发送表单时,数据(id、content、gdate)到达post-ActionResult。然而,一个字段(名为“category”)在post端得到null。缺失的部分是什么 BlogPost模型: public class BlogPost { public virtual string Id { get; set; } public virtual string content { get; set; } public virtual st
public class BlogPost
{
public virtual string Id { get; set; }
public virtual string content { get; set; }
public virtual string gdate { get; set; }
public virtual Category Category { get; set; }
}
类别模型:
public class Category
{
public int ID{ get; set; }
public string Name{ get; set; }
}
视图模型:
public class CreateVM
{
public BlogPost BlogPost { get;
public IEnumerable<SelectListItem> Categories;
}
public class CreateVM
{
public BlogPost BlogPost { get; set;}
public IEnumerable<SelectListItem> Categories{ get; set;}
public int CategoryId{ get; set;}
}
视图:
更改您的助手:
@Html.DropDownListFor(model => model.BlogPost.Category.ID, Model.Categories);
它将在post上绑定选定的Id
然后更改控制器以从数据库中获取现有实体:
[HttpPost]
public ActionResult Create(CreateVM vm)
{
if (ModelState.IsValid)
{
// this is the line where you should get your category entoty from DB. MAby you have different tables. it just example
vm.BlogPost.Category = db.Categories.FirstOrDefault(x => x.ID == vm.BlogPost.Category.ID)
db.BlogPosts.Add(vm.BlogPost);
db.SaveChanges();
return RedirectToAction("Index");
}
}
我已经修改了你的模型和视图,以使事情顺利进行 视图模型:
public class CreateVM
{
public BlogPost BlogPost { get;
public IEnumerable<SelectListItem> Categories;
}
public class CreateVM
{
public BlogPost BlogPost { get; set;}
public IEnumerable<SelectListItem> Categories{ get; set;}
public int CategoryId{ get; set;}
}
注意:类别字段仍将仅返回空值,但在发布表单时,您将看到下拉列表中所选的Id值被相应的Id值填充,这将有助于进一步处理内容。
类别是一个复杂对象,您无法将
(或任何元素)绑定到复杂对象。您应该使用具有属性int-SelectCategory
(绑定到BlogPost.Category.ID
不是一个好主意,如果Category
的任何属性包含验证属性,则ModelState
将无效)的视图模型可以工作。数据正常运行。例如,类别ID为“5”。但是,当我从SQL Explorer中检查相关行类别中的数据表时,ID似乎为“8”。我不知道为什么?@SuatAtan,因为我认为这是一个新的实体。您应该使用FirstOrDefault()方法在控制器post中从db获取existant,但我无法做到这一点。你能详细解释一下吗?@SuatAtan没问题,如果这对你有帮助的话-把它标记为一个答案。让我们。
@Html.DropDownListFor(model => model.CategoryId, new SelectList(Model.Categories, "ID", "Name"));