Я создал этот пример , чтобы показать, как вертикально и горизонтально align
.
Код в основном таков:
#outer {
position: relative;
}
и ...
#inner {
margin: auto;
position: absolute;
left:0;
right: 0;
top: 0;
bottom: 0;
}
, и он останется в center
, даже если вы измените размер экрана.
DefaultModelBinder
не устанавливает значение полей, а только свойства. Вам нужно изменить модель, чтобы включить свойства
public class LetterViewModel
{
public string LetterText { get; set; } // add getter/setter
}
Вам нужно добавить [FromBody] перед параметром в действие
blockquote>[HttpPost] public ActionResult Index([FromBody]LetterViewModel model) { //model.LetterText == null return View(model); }
Вы также можете использовать настраиваемое связующее вместо связующего по умолчанию в случаях, когда у вас нет возможности конвертировать поля в свойства.
Прокрутите входные данные формы и установите их с помощью отражения. 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;
}
}
}