Asp.net mvc 如何将整个ViewModel传递回控制器
我有一个包含两个对象的ViewModel:Asp.net mvc 如何将整个ViewModel传递回控制器,asp.net-mvc,forms,viewmodel,Asp.net Mvc,Forms,Viewmodel,我有一个包含两个对象的ViewModel: public class LookUpViewModel { public Searchable Searchable { get; set; } public AddToSearchable AddToSearchable { get; set; } } 包含的两个模型如下所示: public class Searchable { [Key] public int SearchableId { get; set; }
public class LookUpViewModel
{
public Searchable Searchable { get; set; }
public AddToSearchable AddToSearchable { get; set; }
}
包含的两个模型如下所示:
public class Searchable
{
[Key]
public int SearchableId { get; set; }
public virtual ICollection<AddToSearchable> AddedData { get; set; }
}
public class AddToSearchable
{
[Key]
public int AddToSearchableId { get; set;}
[Required]
public int SearchableId { get; set; }
[Required]
public String Data { get; set; }
[Required]
public virtual Searchable Searchable { get; set; }
}
以下是我的行动方法:
public ActionResult LookUp(LookUpViewModel vm)
{
return View(vm);
}
[HttpPost]
public ActionResult LookUp(string idStr)
{
int id = /*code to parse string to int goes here*/;
Searchable searchable = dal.GetById(id);
LookUpViewModel vm = new LookUpViewModel { Searchable = searchable,
AddToSearchable = new AddToSearchable() };
//When breakpoint is set, vm contains valid references
return View(vm);
}
[HttpPost]
public ActionResult AddMyStuff(LookUpViewModel vm)
{
//**Problem lies here**
//Do backend stuff
}
很抱歉邮件太长。我尽力使它简单。你有什么建议吗。。开火。两种修复方法:
更新:问题是:您需要使用@Html.HiddenFor(),而不是Html.HiddenFor() 我尝试了你的第一个建议。不幸的是,这并没有解决我的问题。您的第二个建议可能有效,但这会破坏创建ViewModel的目的。第一个建议有什么问题?你能用这个建议发布视图吗?虽然我觉得我以前的实现应该可以工作,但我已经更新了我的代码来反映这个变化。忘记提到。。。我看到了和以前一样的问题
LookUpViewModel.Searchable
为空,而LookUpViewModel.AddToSearchable
有效。哦,我知道有什么问题:你需要使用@Html.HiddenFor(),而不是Html.HiddenFor();。
public ActionResult LookUp(LookUpViewModel vm)
{
return View(vm);
}
[HttpPost]
public ActionResult LookUp(string idStr)
{
int id = /*code to parse string to int goes here*/;
Searchable searchable = dal.GetById(id);
LookUpViewModel vm = new LookUpViewModel { Searchable = searchable,
AddToSearchable = new AddToSearchable() };
//When breakpoint is set, vm contains valid references
return View(vm);
}
[HttpPost]
public ActionResult AddMyStuff(LookUpViewModel vm)
{
//**Problem lies here**
//Do backend stuff
}