MVC:Member和Member.Items.add(Item)没有得到保存

时间:2009-06-07 21:18:24

标签: asp.net asp.net-mvc

该项目未保存。只有会员才能得到保存。

当我调试[AcceptVerbs(HttpVerbs.Post)]时  项目中的信息为空。为什么?我该怎么解决这个问题?

当它转到创建的post方法时,ITEM不会跟随该成员。并且ITEMS没有得到保存。我调试信息,有0个数字项。当我按下按钮时,为什么不保存项目。

仅保存成员项目。

public class ClassifiedsFormViewModel
{

    IClassifiedsRepository classifiedsRepository = new ClassifiedsRepository(); 
    public Member Member { get; private set; }
    public SelectList Municipalities { get; private set; } 

    public ClassifiedsFormViewModel(Member member) 
    {   
        Member = member;
        Municipalities = new SelectList(classifiedsRepository.GetMunicipalities()
                                 ,"MunicipalityId", "Municipality1"); 
    }

}

    public ActionResult Create()
    {
        Member member = new Member();
        Item item = new Item();
        member.Items.Add(item);

        return View(new ClassifiedsFormViewModel(member));
    }

    //
    // POST: /Items/Create

    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult Create(Member member)
    {

        if (ModelState.IsValid)
        {

            try
            {
                classifiedsRepository.Add(member);
                classifiedsRepository.Save();

                return RedirectToAction("Create", new { id = member.MemberId });
            }
            catch
            {
                ModelState.AddModelErrors(member.GetRuleViolations());
            }
        }

        return View(new ClassifiedsFormViewModel(member));
    }
}

2 个答案:

答案 0 :(得分:1)

传递给create函数的成员实际上是从表单中数据绑定的。为了确保它的工作原理,您必须在表单上的元素名称与您的成员中的属性相同。因此,如果在Member中有一个名为memberName的东西,你需要在视图中为该字段命名相同的东西。

<form ...
  <input type="text" name="memberName"/>
... 
</form>

修改:

在阅读你的评论后,我仍然不是100%你想做的事情。如果您希望您创建的成员拥有项目,则将项目创建代码向下移动到第二个创建。您所拥有的内容将具有项目的成员传递给强类型视图。具有该项目的成员永远不会保留,因此它不会返回到控制器,也不会进入模型。

答案 1 :(得分:0)

    public ActionResult Create()
    {
        Member member = new Member();
        Item item = new Item();
        member.Items.Add(item);

        return View(new ClassifiedsFormViewModel(member));
    }