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); 
}