我想创建一个包含来自用户
的多个数据的注册页面e.g。 1 - 我得到了一个带有基本ID和名称的userViewModel,并获得了该View的模型;
[Key]
public int CandidatoId { get; set; }
[Required(ErrorMessage = "Preencher o campo Nome")]
[MaxLength(150, ErrorMessage = "Máximo {1} caracteres")]
[MinLength(2, ErrorMessage = "Mínimo {1} caracteres")]
public string Nome { get; set; }
[Required(ErrorMessage = "Preencher o campo CPF")]
[MaxLength(15, ErrorMessage = "Máximo {1} caracteres")]
[MinLength(2, ErrorMessage = "Mínimo {1} caracteres")]
//Criar Datatype de CPF
public string CPF { get; set; }
2 - 也获得了个人数据:
public class DadosPessoaisViewModel
{
[Key]
public int CandidatoId { get; set; }
public char Sexo { get; set; }
[Required(ErrorMessage = "Preencher o campo Endereço")]
[MaxLength(500, ErrorMessage = "Máximo {0} caracteres")]
[MinLength(2, ErrorMessage = "Mínimo {0} caracteres")]
public string Endereco { get; set; }
public virtual Candidato Candidato { get; set; }
}
我将从用户那里获得更多关于5个或更多数据的信息,如家庭信息等。
对于用户界面,我打算在一个引导轮播中进行。
所以我为所有数据创建了一个通用的ViewModel(WithoutFisical模型) 和每种用户数据的一个View模型:
//User ViewModel
public class DadosCandidatoViewModel
{
[Key]
public int CandidatoId { get; set; }
//User ViewModel
public virtual CandidatoViewModel Candidato { get; set; }
//Pessoal Data Info ViewModel
public virtual DadosPessoaisViewModel DadosPessoais { get; set; }
//will Be more data from user here
}
//User Pessoal Data VewModel ( Sample )
public class DadosPessoaisViewModel
{
[Key]
public int CandidatoId { get; set; }
public char Sexo { get; set; }
[Required(ErrorMessage = "Preencher o campo Endereço")]
[MaxLength(500, ErrorMessage = "Máximo {0} caracteres")]
[MinLength(2, ErrorMessage = "Mínimo {0} caracteres")]
public string Endereco { get; set; }
public virtual Candidato Candidato { get; set; }
}
所以我创建了一个编辑视图,其中所有用户数据都被部分视图分隔:
@model Gestao_RH.MVC.ViewModels.DadosCandidatoViewModel
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<!-- Div na qual o "carousel" será aplicado. -->
<div id="div-carousel" class="carousel slide">
<div class="carousel-inner">
<!-- Divs com efeito de transição. -->
<div class="item active">
@Html.Partial("~/Views/DadosPessoais/Edit.cshtml" , Neeed Passs DadosPessoaisViewModel Here???? )
</div>
<div class="item">
Conteúdo da DIV 2.
</div>
</div>
</div>
<div class="row">
<!-- Botões de navegação -->
<div id="div-1" class="span2">
<a id="a-1" class="btn" href="#div-carousel" data-slide="prev"><i class="icon-chevron-left"></i>Voltar para DIV 1</a>
</div>
<div id="div-2" class="span2">
<a id="a-2" class="btn" href="#div-carousel" data-slide="next">Avançar para DIV 2<i class="icon-chevron-right"></i></a>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
现在有问题......
我的所有部分观点都是强类型的,如上例所示:
@model Gestao_RH.MVC.ViewModels.DadosPessoaisViewModel
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>DadosPessoaisViewModel</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.HiddenFor(model => model.CandidatoId)
<div class="form-group">
@Html.LabelFor(model => model.Sexo, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Sexo, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Sexo, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Endereco, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Endereco, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Endereco, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
@Html.ActionLink("Save", "Edit", "DadosPessoais")
@*<input type="submit" value="Save" class="btn btn-default" />*@
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
问题是这个View需要一个DadosPessoaisViewModel(用户Perssonal数据)但我在此上下文中只有DadosCandidatoViewModel才能发送。
例如我的控制器:
public class DadosCandidatoController : Controller
{
private readonly ICandidatoAppService _candidato;
public DadosCandidatoController(ICandidatoAppService candidato)
{
_candidato = candidato;
}
public ActionResult Edit(int id)
{
var cargo = _candidato.GetById(id);
var DadosCandidatoViewModel = Mapper.Map<Candidato, DadosCandidatoViewModel>(cargo);
return View(DadosCandidatoViewModel);
}
}
答案 0 :(得分:0)
如果我正确理解您的问题,您有两个相互依赖但视图不同的视图模型。解决此问题的最佳方法是使依赖属性成为整个页面视图模型的一方,这样两个视图都可以同时访问这些属性。
可以找到如何从多个部分视图访问视图模型的一个属性的问题here
答案 1 :(得分:0)
DadosCandidatosViewModel possui DadosPessoaisViewModel,vocênaopode chamar a partial view assim?
@Html.Partial("~/Views/DadosPessoais/Edit.cshtml" , Model.DadosPessoais)