与一个寄存器MVC 3添加多个寄存器关系

时间:2013-04-08 17:05:15

标签: asp.net-mvc entity-framework view partial-views relationship

我是新的MVC开发人员,但我很长时间以来都是C#程序员。

在我的系统上,我需要添加多个电话号码并与一位客户建立联系。 这是我的流程:

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

这个流程,不能在一个页面上。 我需要保存客户,保存所有电话号码后,与客户联系。

这是我的客户表: IdCliente int, Nome varchar(100), isAtivo位

这是我的电话号码表: IdTelefone int autoincrement, IdPessoa int(带有Customer表的FK), 数字bigint

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

我的观点分为两部分。 具有de Customer Data的Customer页面和带有de telephone Number Data的PartialView。

这是我的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 个答案:

答案 0 :(得分: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);
}