MVC Model Binding with Checkbox list & hellip, возможно, преследует [дубликат]

Центрирование только по горизонтали

По моему опыту, наилучшим способом центрировать ящик горизонтально является применение следующих свойств:

Контейнер:

  • должен иметь text-align: center;

Поле содержимого:

  • должно иметь display: inline-block;

Демонстрация:

.container {
  width: 100%;
  height: 120px;
  background: #CCC;
  text-align: center;
}

.centered-content {
  display: inline-block;
  background: #FFF;
  padding: 20px;
  border: 1px solid #000;
}
Center this!

См. также этот Fiddle !


Центрирование и горизонтально & amp; по вертикали

По моему опыту, лучший способ центрировать коробку как вертикально, так и горизонтально - использовать дополнительный контейнер и применять следующие свойства:

Внешний контейнер:

  • должен иметь display: table;

Внутренний контейнер:

  • должен иметь display: table-cell;
  • должен иметь vertical-align: middle;
  • должен иметь text-align: center;

Поле содержимого:

  • должно иметь display: inline-block;

Демо:

.outer-container {
  display: table;
  width: 100%;
  height: 120px;
  background: #CCC;
}

.inner-container {
  display: table-cell;
  vertical-align: middle;
  text-align: center;
}

.centered-content {
  display: inline-block;
  background: #FFF;
  padding: 20px;
  border: 1px solid #000;
}
Center this!

См. также этот скрипт !

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

3 ответа

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

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

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

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

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

Прокрутите входные данные формы и установите их с помощью отражения. 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 28 August 2018 в 05:14
поделиться
Другие вопросы по тегам:

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