如何在两个表中保存数据? (在创建中)

时间:2012-11-05 12:15:59

标签: c# asp.net-mvc-3 visual-studio-2010

美好的一天,

我想知道如何在创建中保存信息。

@model Request.Models.Chamados
@model Request.Models.InteracoesChamados 
@{
    ViewBag.Title = "Create";
}

如上面的两个表所示,当然不起作用。 请给我一个例子,因为它使我感到困惑。

注意:为了清楚起见,我填写表格并在点击保存时保存到2个表格。

环境: Windows 7的, Visual Studio 2010, C #, MVC3 + Razor实体框架

2 个答案:

答案 0 :(得分:0)

这里似乎有一些事情,但对于初学者来说,每个视图只能声明一个模型。

您可以创建一个具有上述两种功能的ViewModel,例如

public class ChamodosViewModel{
   public Chamados Chamados {get;set;}
   public InteracoesChamados InteracoesChamados {get;set;}
}

然后在你的视图中

@model ChamodosViewModel

答案 1 :(得分:0)

请勿在您的视图中使用域模型。创建一个特定于您的视图的新 POCO 类。我们称之为 ViewModel

public class ChamodoVM
{
  [Required]
  public string ChamdoName { set;get;}
  [Required]
  public string InteracoName { set;get;}

  //other properties here as needed
}

现在在GET动作中创建此类的对象并传递给View方法。

public ActionResult Create()
{
  var vm=new ChamodoVM();
  return View(vm);
}

使您的视图强烈输入ViewModel类。

@model ChamodoVM
@using(Html.BeginForm())
{
  @Html.LabelFor(x=>x.ChamodoName)
  @Html.TextBoxFor(x=>x.ChamodoName)

  @Html.LabelFor(x=>x.InteracoName)
  @Html.TextBoxFor(x=>x.InteracoName)

  <input type="submit" />
}

当用户提交表单时,请从视图模型中读取值并将其分配给域模态的对象并保存。感谢MVC模型绑定。 :)

[HttpPost]
public ActionResult Create(ChamodoVM model)
{
  if(ModelState.IsValid)
  {
    var domainModel=new Chamodo();
    domainModel.Name=model.ChamodoName;
    domainModel.Interaco=new Interaco();
    domainModel.Interaco.Name=model.InteracoName;

    yourRepositary.SaveClient(domainModel);  
    //If saved successfully, Redirect to another view (PRG pattern)
    return RedirectToAction("ChamodoSaved");
  }
  return View(model);    
}