JSON не анализирует модель в действии контроллера в JQuery Post [duplicate]

Я создал этот пример , чтобы показать, как вертикально и горизонтально align.

Код в основном таков:

#outer {
  position: relative;
}

и ...

#inner {
  margin: auto;  
  position: absolute;
  left:0;
  right: 0;
  top: 0;
  bottom: 0;
} 

, и он останется в center, даже если вы измените размер экрана.

0
задан Stephen Muecke 4 June 2016 в 05:35
поделиться

3 ответа

DefaultModelBinder не устанавливает значение полей, а только свойства. Вам нужно изменить модель, чтобы включить свойства

public class LetterViewModel
{
    public string LetterText { get; set; } // add getter/setter
}
9
ответ дан Stephen Muecke 26 August 2018 в 12:13
поделиться

Вам нужно добавить [FromBody] перед параметром в действие

[HttpPost]
public ActionResult Index([FromBody]LetterViewModel model)
{ 
    //model.LetterText == null
    return View(model);
}
0
ответ дан Sanket Parchande 26 August 2018 в 12:13
поделиться

Вы также можете использовать настраиваемое связующее вместо связующего по умолчанию в случаях, когда у вас нет возможности конвертировать поля в свойства.

Прокрутите входные данные формы и установите их с помощью отражения. MemberInformation - это мой класс, но вы можете просто использовать FieldInfo.

Это не делает граф объектов, но если мне нужна эта способность, я усилю свой ответ. Кортеж в foreach использует c # 7.0. Он также предполагает, что вы сохранили свой объект из предыдущего GET до этого POST.

using CommonBusinessModel.Metadata;
using GHCOMvc.Controllers;
using System;
using System.Linq;
using System.Web.Mvc;

namespace AtlasMvcWebsite.Binders
{
  public class FieldModelBinder : DefaultModelBinder
  {
    // this runs before any filters (except auth filters)
    public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
    {
      var form = controllerContext.HttpContext.Request.Form;
      Type type = typeof(GHCOBusinessModel.GHCOPPAType);
      AtlasKernelBusinessModel.VersionedObject instance = PolicyController.Policy;

      foreach ((var value, var member) in (from string input in form
                                           let fi = type.GetField(input)
                                           where fi != null
                                           let mi = new MemberInformation(fi, instance)
                                           where !mi.ReadOnly
                                           select (form[input], mi)))
        member.SetValue(value);

      return instance;
    }

  }
}
0
ответ дан toddmo 26 August 2018 в 12:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: