我是新的 MVC 开发人员,但我长期以来一直是 C# 程序员。
在我的系统上,我需要添加多个电话号码并与一位客户联系。这是我的流程:
1º 保存我的客户数据。2º 为我最近的客户添加多个电话号码
这个流程,不能超过一页。我需要保存客户并在保存所有电话号码后与客户联系。
这是我的客户表:IdCliente int, Nome varchar(100), isAtivo bit
这是我的电话号码表:IdTelefone int autoincrement, IdPessoa int (FK with Customer table), Number bigint
当我保存电话号码时,我需要传递我最近客户的 IdCustomer。
我的观点分为两部分。带有客户数据的客户页面,以及一个带有电话号码数据的 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);
}
}
}
电话号码控制器:
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);
}
}
}