ASP.NET MVC - 绑定的隐藏字段不包含值

ASP.NET MVC - Hidden Field binded doesn't contain value

我的项目 (ASP.NET MVC 5/AJAX/BOOTSTRAP) 遇到问题。

当点击页面上的保存按钮时,.Net 调用 POST 正确的操作,但 PSATOKEN 的隐藏字段不包含值(参见@Html.HiddenFor(m => m.PSAToken) 在视图中),尽管 PSAToken 在控制器方法中包含一个 GUID 值(在调试模式下看到)。

让我们看下面的一些代码。

非常感谢回答者!

型号

public interface IPSAPageViewModel
{
    String PSAToken { get; set; }
    int IdPSAAzienda { get; set; }
}
public abstract class BasePSAPageViewModel : IPSAPageViewModel
{
    public String PSAToken { get; set; }
    public int IdPSAAzienda { get; set; }
}
public class DatiGeneraliViewModel : BasePSAPageViewModel 
{
    public DatiGeneraliViewModel()
    {
        this.Item = new InformazioniGenerali();
    }
    public Crea.PSA.ServiceLayer.BO.InformazioniGenerali Item { get; set; }
    public List<SelectListItem> FormeGiuridicheList { set; get; }
    public List<SelectListItem> FormeConduzioneList { set; get; }
}

控制器

   private ViewResult ViewPSAPage(IPSAPageViewModel vm)
    {
        base.createViewBagPaginePrecSucc();
        return View(vm);
    }
    [HttpPost]
    [ValidateAntiForgeryToken]
    [HttpParamAction]
    public ActionResult SalvaDatiGeneraliProsegui(DatiGeneraliViewModel vm)
    {
        return salvataggioDatiGenerali(vm, true);
    }

    [HttpPost]
    [ValidateAntiForgeryToken]
    [HttpParamAction]
    public ActionResult SalvaDatiGenerali(DatiGeneraliViewModel vm)
    {
        //Here vm.PSAToken doesn't contain the value setted 
        return salvataggioDatiGenerali(vm);
    }

    private ActionResult salvataggioDatiGenerali(DatiGeneraliViewModel vm, bool proseguiCompilazione = false)
    {
        if (ModelState.IsValid)
        {
            var resp = aziendeManager.Save(vm.PSAToken, vm.Item, SessionManager.UserIdConnected, CONTROLLERNAME);
            if (resp.Success)
            {
                var psaAzienda = resp.DataObject;
                setVarsInSession(psaAzienda.idToken.ToString(), psaAzienda.idPsaAzienda.ToString(), psaAzienda.Aziende.ragioneSociale);

                //Here there is some Value (POST)
                vm.PSAToken = psaAzienda.idToken.ToString();
                //vm.IdPSAAzienda = psaAzienda.idPsaAzienda.ToString();

                if (proseguiCompilazione)
                    return RedirectToAction("DatiAziendaliRiepilogativi", new { id = psaAzienda.idToken });
            }
            else
                ModelState.AddModelError("", resp.Message);
        }
        setSuccessMessage();
        vm.FormeGiuridicheList = aziendeManager.GetAllFormeGiuridiche().ToSelectItems();
        vm.FormeConduzioneList = aziendeManager.GetAllFormeConduzione().ToSelectItems();
        return ViewPSAPage(vm);
    }

查看

点击查看视图here

Here 你可以在VS中看到debug时的值

但是生成的HTMLPSATOKEN的Hidden Field是空的

我在这里找到了解决方案: patrickdesjardins.com/blog/…