2

我有一个使用隐藏表单和给定实体模型的所有字段呈现的视图。在某些时候,通过 JavaScript,我在这些字段中输入数据并发布表单。

在控制器上,我收到了关于该实体模型实例的发布数据,但只有一个属性除外。检查(用手表)Request.Form,该属性就在那里,具有正确的名称和值。

会发生什么?

这是一些代码:(查看)

<div id="dvHiddenFormularioPacientePesquisa" style="display:none;">
    @using (Html.BeginForm("ParticipacaoPaciente", "RealizacaoPesquisa", FormMethod.Post, new { @id = "frmPacientePesquisa" }))
    {
        PacientePesquisa PacientePesquisa;
        if (Model.PacientePesquisa != null) { PacientePesquisa = Model.PacientePesquisa; } 
        else 
        { 
            PacientePesquisa = new PacientePesquisa();
            PacientePesquisa.IDPesquisa = Model.Pesquisa.IDPesquisa;
            PacientePesquisa.NRProntuario = Model.Paciente.NRProntuario;
        }

        @Html.HiddenFor(paciente => PacientePesquisa.IDPacientePesquisa)
        @Html.HiddenFor(paciente => PacientePesquisa.IDPesquisa)
        @Html.HiddenFor(paciente => PacientePesquisa.NRProntuario)
        @Html.HiddenFor(paciente => PacientePesquisa.CodSituacaoPacientePesquisa)
        @Html.HiddenFor(paciente => PacientePesquisa.IDMotivoExclusaoIndividuo)
        @Html.HiddenFor(paciente => PacientePesquisa.ObsMotivoExclusao)
    }
</div>

(JS动作)

$('#PacientePesquisa_CodSituacaoPacientePesquisa').val('A'); //Situação do Paciente-Pesquisa: (A)tivo
$('#PacientePesquisa_IDMotivoExclusaoIndividuo').val('');
$('#PacientePesquisa_ObsMotivoExclusao').val('');
$('#frmPacientePesquisa').submit();
return true;

(控制器)

[HttpPost]
public ActionResult ParticipacaoPaciente(PacientePesquisa pacPesq)
{ 
    try
    {
        if (pacPesq.IDPacientePesquisa <= 0) 
        {
            pacPesq.IDUsuario = this.LoggedUser().IDUsuario;
            pacPesq.DataCriacao = DateTime.Now;
        }

        //Limpeza dos erros de validação prévios
        foreach (var modelValue in ModelState.Values)
        {
            modelValue.Errors.Clear();
        }
        //Re-validação do modelo
        ValidateModel(pacPesq); //<== Error here, due to pacPesq.CodSituacaoPacientePesquisa == null, when the posted data value for this attribute is "A"

编辑:

(该字段的实体定义)

public string CodSituacaoPacientePesquisa { get; set; } /* "A" = Ativo / "E" = Excluído */

(观看“Request.Form”)

Request.Form    
{
    PacientePesquisa.IDPacientePesquisa=0
    PacientePesquisa.IDPesquisa=1
    PacientePesquisa.NRProntuario=0000009903
    PacientePesquisa.CodSituacaoPacientePesquisa=A
    PacientePesquisa.IDMotivoExclusaoIndividuo=
    PacientePesquisa.ObsMotivoExclusao=
}   System.Collections.Specialized.NameValueCollection {System.Web.HttpValueCollection}
4

1 回答 1

0

Upod 看到您的表单我注意到您的创建视图没有使用模型作为您的强类型视图,而是似乎您正在使用自定义模型绑定器,这就是为什么当您发布表单时,您的控制器不会从您的视图中绑定您的模型。如果您仍想保留当前的实现,有两种方法可以做。

1号解决方案:

将表单集合中的每个字段分配给模型类

例子:

pacPesq.CodSituacaoPacientePesquisa=Request.Form["CodSituacaoPacientePesquisa"];
pacPesq.IDMotivoExclusaoIndividuo=Request.Form["IDMotivoExclusaoIndividuo"];

2 号解决方案:使用 CustomModelBinder/Dynamic

要使用 CustomModelBinder,请参阅此示例:http ://dotnetslackers.com/articles/aspnet/ASP-NET-MVC-Dynamic-Model-Binding.aspx

于 2013-10-14T05:23:17.353 回答