1

再会,

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

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

如上面的两个表所示,当然是行不通的。请给我一个例子,因为它让我感到困惑。

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

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

4

2 回答 2

0

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

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

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

然后在你看来

@model ChamodosViewModel
于 2012-11-05T12:55:58.853 回答
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);    
}
于 2012-11-05T13:07:26.323 回答