0

我是新的MVC开发人员,但我很长一段时间是C#程序员。添加多个寄存器与一个寄存器的关系MVC 3

在我的系统需要添加多个电话号码和链接与一个客户。 这是我的流程:

1º保存我的客户数据。 2º添加多个电话号码,我最近的客户

这种流动,不能是更多的一页。 我需要保存客户,保存所有电话号码后,与客户联系。

这是我的客户表: IdCliente INT, 诺姆为varchar(100), isAtivo位

,这是我的电话号码表: IdTelefone INT自动增量, IdPessoa INT(FK与客户表) , 数BIGINT

当我保存telefone号码,我需要通过我的客户最近的IdCustomer。

我的观点是拆分两个部分。 带有客户数据的客户页面和带有电话号码数据的一个部分视图。

这是我的HTML

@model MSX_Contabil.Models.PESSOA_TB 
@{ ViewBag.Title = "MSX Contail - Cadastro de Pessoa"; 
} 
<h2> 
    Cadastro de pessoa</h2> 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
<script> 
    $(function() { 
     $("#DT_NASCIMENTO").datepicker(); 
     $("#accordion").accordion(); 
     $("#tabs").tabs(); 
    }); 
</script> 
@using (Html.BeginForm()) 
{ 
    @Html.ValidationSummary(true) 

    <table style="width: 100%"> 
     <tr> 
      <td style="width: 25%"> 
       @Html.LabelFor(model => model.ID_TIPO_PESSOA, "Tipo pessoa")<label>*</label> 
      </td> 
      <td style="width: 25%"> 
       @Html.LabelFor(model => model.NM_PESSOA, "Nome")<label>*</label> 
      </td> 
      <td style="width: 25%"> 
      </td> 
      <td style="width: 25%"> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       @Html.DropDownList("ID_TIPO_PESSOA", "-- selecione --") 
       @Html.ValidationMessageFor(model => model.ID_TIPO_PESSOA, "Campo obrigatório") 
      </td> 
      <td colspan="3"> 
       @Html.EditorFor(model => model.NM_PESSOA) 
       @Html.ValidationMessageFor(model => model.NM_PESSOA, "Campo obrigatório") 
      </td> 
     </tr> 
     <tr> 
      <td> 
       @Html.LabelFor(model => model.DT_NASCIMENTO, "Data nascimento")<label>*</label> 
      </td> 
      <td> 
       @Html.LabelFor(model => model.ID_ESTADO_CIVIL, "Estado civil") 
      </td> 
      <td> 
       @Html.LabelFor(model => model.FL_ATIVO, "Pessoa ativa") 
      </td> 
      <td> 
      </td> 
     </tr> 
     <tr> 
      <td> 
       @Html.EditorFor(model => model.DT_NASCIMENTO) 
       @Html.ValidationMessageFor(model => model.DT_NASCIMENTO, "Campo obrigatório") 
      </td> 
      <td> 
       @Html.DropDownList("ID_ESTADO_CIVIL", "-- selecione --") 
      </td> 
      <td> 
       @Html.EditorFor(model => model.FL_ATIVO) 
       @Html.ValidationMessageFor(model => model.FL_ATIVO) 
      </td> 
      <td> 
      </td> 
     </tr> 
    </table> 



    if (ViewBag.PessoaSalva != true) 
    { 
    <p> 
     <input type="submit" value="Salvar" /> 
     <input type="submit" value="Cancelar" onclick="javascript:window.navigate('/Pessoa'); return false;" /> 
    </p> 
    } 
} 
@if (ViewBag.PessoaSalva == true) 
{ 
    <div id="tabs"> 
     <ul> 
      <li><a href="#Telefone">Telefones</a></li> 
      <li><a href="#Documento">Documentos</a></li> 
      <li><a href="#Endereco">Endereços</a></li> 
      <li><a href="#Email">E-mails</a></li> 
      <li><a href="#Contato">Contatos</a></li> 
     </ul> 
     <div id="Telefone"> 
      <p> 
       @Html.Partial("TelefonePessoa", new MSX_Contabil.Models.TELEFONE_PESSOA_TB()) 
      </p> 
     </div> 
     <div id="Document"> 
     </div> 
     <div id="Endereco"> 
     </div> 
     <div id="Email"> 
     </div> 
     <div id="Contato"> 
     </div> 
    </div> 
} 

这是我的局部视图我的电话号码时,页面。

@model MSX_Contabil.Models.TELEFONE_PESSOA_TB 
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
@using (Html.BeginForm("Inserir", "TelefonePessoa", FormMethod.Post)) 
{ 
    @Html.ValidationSummary(true) 

    <table width="100%"> 
     <tr> 
      <td> 
       @Html.LabelFor(model => model.ID_OPERADORA_TELEFONIA, "Operadora") 
      </td> 
      <td>@Html.LabelFor(model => model.NU_TELEFONE, "Número") 
      </td> 
      <td> 
       @Html.LabelFor(model => model.NU_RAMAL, "Ramal") 
      </td> 
     </tr> 
     <tr> 
      <td>@Html.EditorFor(model => model.ID_OPERADORA_TELEFONIA) 
       @Html.ValidationMessageFor(model => model.ID_OPERADORA_TELEFONIA) 
      </td> 
      <td>@Html.EditorFor(model => model.NU_TELEFONE) 
       @Html.ValidationMessageFor(model => model.NU_TELEFONE) 
      </td> 
      <td>@Html.EditorFor(model => model.NU_RAMAL) 
       @Html.ValidationMessageFor(model => model.NU_RAMAL) 
      </td> 
     </tr> 
     <tr> 
      <td colspan="3"> 
       @Html.LabelFor(model => model.DS_OBSERVACAO, "Observação") 
      </td> 
     </tr> 
     <tr> 
      <td colspan="3"> 
       @Html.TextAreaFor(model => model.DS_OBSERVACAO) 
       @Html.ValidationMessageFor(model => model.DS_OBSERVACAO) 
      </td> 
     </tr> 
    </table> 
    <p> 
     <input type="submit" value="Adicionar" id="btnSalvar" /> 
    </p> 

} 

这是我的控制器代码。

CustomerController: 
using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using MSX_Contabil.Models; 

namespace MSX_Contabil.Controllers 
{ 
    public class PessoaController : Controller 
    { 
     private MSXContabilEntities db = new MSXContabilEntities(); 

     public ViewResult Index() 
     { 
      var pessoa_tb = db.PESSOA_TB.Include("TIPO_PESSOA_TB"); 
      return View(pessoa_tb.ToList()); 
     } 

     public ViewResult Details(string guid) 
     { 
      PESSOA_TB pessoa_tb = db.PESSOA_TB.Single(p => p.CD_IDENTIFICACAO == guid); 
      return View(pessoa_tb); 
     } 

     public ActionResult Create() 
     { 
      ViewBag.ID_TIPO_PESSOA = new SelectList(db.TIPO_PESSOA_TB, "ID_TIPO_PESSOA", "NM_TIPO_PESSOA"); 
      ViewBag.ID_ESTADO_CIVIL = new SelectList(db.ESTADO_CIVIL_TB, "ID_ESTADO_CIVIL", "NM_ESTADO_CIVIL"); 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Create(PESSOA_TB pessoa_tb) 
     { 
      if (ModelState.IsValid) 

      { 
       pessoa_tb.CD_IDENTIFICACAO = Guid.NewGuid().ToString(); 
       db.PESSOA_TB.AddObject(pessoa_tb); 
       db.SaveChanges(); 
       pessoa_tb.CD_PESSOA = pessoa_tb.ID_PESSOA.ToString().PadLeft(4, '0'); 
       db.ObjectStateManager.ChangeObjectState(pessoa_tb, EntityState.Modified); 
       db.SaveChanges(); 
       ViewBag.PessoaSalva = true; 
       ViewBag.ID_PESSOA = pessoa_tb.ID_PESSOA; 
       RouteData.Values.Add("ID_PESSOA", pessoa_tb.ID_PESSOA); 
      } 

      ViewBag.ID_TIPO_PESSOA = new SelectList(db.TIPO_PESSOA_TB, "ID_TIPO_PESSOA", "NM_TIPO_PESSOA", pessoa_tb.ID_TIPO_PESSOA); 
      ViewBag.ID_ESTADO_CIVIL = new SelectList(db.ESTADO_CIVIL_TB, "ID_ESTADO_CIVIL", "NM_ESTADO_CIVIL"); 
      return View(pessoa_tb); 
     } 

     public ActionResult Edit(string guid) 
     { 
      PESSOA_TB pessoa_tb = db.PESSOA_TB.Single(p => p.CD_IDENTIFICACAO == guid); 
      ViewBag.ID_TIPO_PESSOA = new SelectList(db.TIPO_PESSOA_TB, "ID_TIPO_PESSOA", "NM_TIPO_PESSOA", pessoa_tb.ID_TIPO_PESSOA); 
      ViewBag.ID_ESTADO_CIVIL = new SelectList(db.ESTADO_CIVIL_TB, "ID_ESTADO_CIVIL", "NM_ESTADO_CIVIL"); 
      return View(pessoa_tb); 
     } 

     [HttpPost] 
     public ActionResult Edit(PESSOA_TB pessoa_tb) 
     { 
      if (ModelState.IsValid) 
      { 
       db.PESSOA_TB.Attach(pessoa_tb); 
       db.ObjectStateManager.ChangeObjectState(pessoa_tb, EntityState.Modified); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      ViewBag.ID_TIPO_PESSOA = new SelectList(db.TIPO_PESSOA_TB, "ID_TIPO_PESSOA", "NM_TIPO_PESSOA", pessoa_tb.ID_TIPO_PESSOA); 
      ViewBag.ID_ESTADO_CIVIL = new SelectList(db.ESTADO_CIVIL_TB, "ID_ESTADO_CIVIL", "NM_ESTADO_CIVIL"); 
      return View(pessoa_tb); 
     } 

     public ActionResult Delete(int id) 
     { 
      PESSOA_TB pessoa_tb = db.PESSOA_TB.Single(p => p.ID_PESSOA == id); 
      return View(pessoa_tb); 
     } 

     [HttpPost, ActionName("Delete")] 
     public ActionResult DeleteConfirmed(int id) 
     { 
      PESSOA_TB pessoa_tb = db.PESSOA_TB.Single(p => p.ID_PESSOA == id); 
      db.PESSOA_TB.DeleteObject(pessoa_tb); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     public ActionResult Inativar(string guid) 
     { 
      PESSOA_TB pessoa_tb = db.PESSOA_TB.Single(u => u.CD_IDENTIFICACAO == guid); 
      pessoa_tb.FL_ATIVO = (pessoa_tb.FL_ATIVO ? false : true); 
      db.ObjectStateManager.ChangeObjectState(pessoa_tb, EntityState.Modified); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     protected override void Dispose(bool disposing) 
     { 
      db.Dispose(); 
      base.Dispose(disposing); 
     } 
    } 
} 

TelefoneNumberController:

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Data.Entity; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using MSX_Contabil.Models; 

namespace MSX_Contabil.Controllers 
{ 
    public class TelefonePessoaController : Controller 
    { 
     private MSXContabilEntities db = new MSXContabilEntities(); 

     // 
     // GET: /TelefonePessoa/ 

     public ViewResult Index() 
     { 
      var telefone_pessoa_tb = db.TELEFONE_PESSOA_TB.Include("PESSOA_TB"); 
      return View(telefone_pessoa_tb.ToList()); 
     } 

     // 
     // GET: /TelefonePessoa/Details/5 

     public ViewResult Details(int id) 
     { 
      TELEFONE_PESSOA_TB telefone_pessoa_tb = db.TELEFONE_PESSOA_TB.Single(t => t.ID_PESSOA == id); 
      return View(telefone_pessoa_tb); 
     } 

     // 
     // GET: /TelefonePessoa/Create 

     public ActionResult Create() 
     { 
      ViewBag.ID_PESSOA = new SelectList(db.PESSOA_TB, "ID_PESSOA", "CD_PESSOA"); 
      return View(); 
     } 

     // 
     // POST: /TelefonePessoa/Create 

     [HttpPost] 
     public ActionResult Create(TELEFONE_PESSOA_TB telefone_pessoa_tb) 
     { 
      if (ModelState.IsValid) 
      { 
       db.TELEFONE_PESSOA_TB.AddObject(telefone_pessoa_tb); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      ViewBag.ID_PESSOA = new SelectList(db.PESSOA_TB, "ID_PESSOA", "CD_PESSOA", telefone_pessoa_tb.ID_PESSOA); 
      return View(telefone_pessoa_tb); 
     } 

     [HttpPost, ActionName("Inserir")] 
     public ActionResult Inserir(TELEFONE_PESSOA_TB telefone_pessoa_tb) 
     { 
      if (ModelState.IsValid) 
      { 
       telefone_pessoa_tb.ID_PESSOA = Convert.ToInt32(RouteData.GetRequiredString("ID_PESSOA")); 
       db.TELEFONE_PESSOA_TB.AddObject(telefone_pessoa_tb); 
       db.SaveChanges(); 
      } 

      ViewBag.ID_PESSOA = new SelectList(db.PESSOA_TB, "ID_PESSOA", "CD_PESSOA", telefone_pessoa_tb.ID_PESSOA); 
      return View(telefone_pessoa_tb); 
     }   

     // 
     // GET: /TelefonePessoa/Edit/5 

     public ActionResult Edit(int id) 
     { 
      TELEFONE_PESSOA_TB telefone_pessoa_tb = db.TELEFONE_PESSOA_TB.Single(t => t.ID_PESSOA == id); 
      ViewBag.ID_PESSOA = new SelectList(db.PESSOA_TB, "ID_PESSOA", "CD_PESSOA", telefone_pessoa_tb.ID_PESSOA); 
      return View(telefone_pessoa_tb); 
     } 

     // 
     // POST: /TelefonePessoa/Edit/5 

     [HttpPost] 
     public ActionResult Edit(TELEFONE_PESSOA_TB telefone_pessoa_tb) 
     { 
      if (ModelState.IsValid) 
      { 
       db.TELEFONE_PESSOA_TB.Attach(telefone_pessoa_tb); 
       db.ObjectStateManager.ChangeObjectState(telefone_pessoa_tb, EntityState.Modified); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      ViewBag.ID_PESSOA = new SelectList(db.PESSOA_TB, "ID_PESSOA", "CD_PESSOA", telefone_pessoa_tb.ID_PESSOA); 
      return View(telefone_pessoa_tb); 
     } 

     // 
     // GET: /TelefonePessoa/Delete/5 

     public ActionResult Delete(int id) 
     { 
      TELEFONE_PESSOA_TB telefone_pessoa_tb = db.TELEFONE_PESSOA_TB.Single(t => t.ID_PESSOA == id); 
      return View(telefone_pessoa_tb); 
     } 

     // 
     // POST: /TelefonePessoa/Delete/5 

     [HttpPost, ActionName("Delete")] 
     public ActionResult DeleteConfirmed(int id) 
     {    
      TELEFONE_PESSOA_TB telefone_pessoa_tb = db.TELEFONE_PESSOA_TB.Single(t => t.ID_PESSOA == id); 
      db.TELEFONE_PESSOA_TB.DeleteObject(telefone_pessoa_tb); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     protected override void Dispose(bool disposing) 
     { 
      db.Dispose(); 
      base.Dispose(disposing); 
     } 
    } 
} 
+1

这是太多的代码。 (为什么你需要为你的问题显示'Delete'和'Index'动作等等)你能提取与你的问题相关的代码片段并解释问题出在哪里? – Slauma 2013-04-08 17:30:49

+0

你可以让它简单吗? – ssilas777 2013-04-08 17:43:39

+0

我如何将最近添加的IdCustomer传递给我的PartialView以保存与我收到的ID链接的电话号码? – 2013-04-08 18:25:34

回答

0

我解决我的问题!

我把一个链接重定向到传递参数IdCustomer的电话号码的看法后,我保存的电话号码,我重定向到经过他的id动作编辑客户。

<p> 
    @Html.ActionLink("Adicionar telefone", "Create", "TelefonePessoa", new { id = Model.ID_PESSOA, guid = Model.CD_IDENTIFICACAO }, null) 
</p> 

代码保存电话号码:

[HttpPost] 
public ActionResult Create(TELEFONE_PESSOA_TB telefone_pessoa_tb, int id, string guid) 
{ 
    if (ModelState.IsValid) 
    { 
     telefone_pessoa_tb.ID_PESSOA = id; 
     db.TELEFONE_PESSOA_TB.AddObject(telefone_pessoa_tb); 
     db.SaveChanges(); 
     return RedirectToAction("Edit", "Pessoa", new { guid = guid }); 
    } 

    ViewBag.ID_PESSOA = new SelectList(db.PESSOA_TB, "ID_PESSOA", "CD_PESSOA", telefone_pessoa_tb.ID_PESSOA); 
    return View(telefone_pessoa_tb); 
}