Форма возвращает null viewmodel в Action [duplicate]

О Боже! Я только что видел ваше опубликованное изображение снова, вы просто открываете свой php-файл в браузере. у вас есть open, использующий localhost url. если вы открываете файл непосредственно из своего каталога, он не будет выполнять php-код в любом случае.

use: http://locahost/index.php или http:127.0.0.1/index.php

включить php-код в вашем случае , вы используете <?, который является коротким кодом php для <?php

, по умолчанию короткие короткие коды php отключены.

также используют: sudo apt-get install php5 libapache2-mod-php5 php5-mcrypt, если вы являетесь пользователем ubuntu .

24
задан Riri 29 January 2015 в 11:12
поделиться

4 ответа

Во-первых, DefaultModelBinder не связывается с полями, поэтому вам нужно использовать свойства

public class HomeModel
{
  public Foo Foo { get; set; }
}

. Во-вторых, помощники генерируют элементы управления на основе HomeModel, но вы отправляете обратно на Foo , Либо измените метод POST на

[HttpPost]
public ActionResult Save(HomeModel model)

, либо используйте BindAttribute, чтобы указать Prefix (который, по существу, разделяет значение префикса от опубликованных значений - поэтому Foo.Bar.Value становится Bar.Value для цели привязки)

[HttpPost]
public ActionResult Save([Bind(Prefix="Foo")]Foo model)

Обратите внимание, что вы не должны указывать параметр метода с тем же именем, что и одно из ваших свойств, иначе привязка будет неудачной, а ваша модель будет пустой.

34
ответ дан Stephen Muecke 20 August 2018 в 18:55
поделиться
  • 1
    & quot; не следует указывать параметр метода с тем же именем, что и одно из ваших свойств, иначе привязка завершится неудачно, и ваша модель будет нулевой. & quot; - Спасибо за эту заметку! Но О, Боже мой, какая расстроенная добыча. Я уверен, что есть некоторые технические трудности, но, конечно же, они могли бы преодолеть это неожиданное и трудное, чтобы когда-либо обнаружить ограничение. Даже с SO, я прочитал много статей, прежде чем найти это, и вы могли бы просто не поместить это. Мне кажется, стоило бы преодолеть это ограничение. В любом случае, спасибо миллион. – Nicholas Petersen 16 February 2016 в 23:42
  • 2
    @NicholasPetersen, вы правы, что его разочарование и не очевидное, но на самом деле нет способа преодолеть это из-за того, как работает привязка модели. Фактическое поведение более подробно описано в в этом ответе . Жаль, что это не лучше документировано. – Stephen Muecke 16 February 2016 в 23:50
  • 3
    Вытащил мои волосы за последние несколько часов над свойствами и полями. Я не могу поверить, что это было так просто. uggggggh – ferr 27 June 2017 в 17:07

У меня была такая же проблема, и после того, как я последовал за шагами @Stephen Muecke, я понял, что проблема вызвана тем, что мои входы были отключены (я отключил их с помощью JQuery на готовом документе), как вы можете видеть здесь: How я отправляю отключенный ввод в ASP.NET MVC? . В конце я использовал только для чтения, а не для отключенного атрибута, и все значения были успешно отправлены контроллеру.

0
ответ дан Community 20 August 2018 в 18:55
поделиться

Я только что открыл еще одну причину, которая может произойти, а именно, если ваше свойство называется Settings! Рассмотрим следующую модель просмотра:

public class SomeVM
{
    public SomeSettings DSettings { get; set; } // named this way it will work

    public SomeSettings Settings { get; set; } // property named 'Settings' won't bind!

    public bool ResetToDefault { get; set; }
}

В коде, если вы привязываетесь к свойству Settings, он не может связываться (не только по почте, но даже при генерации формы). Если вы переименуете Settings в DSettings (и т. Д.), Он снова начнет работать снова.

3
ответ дан Nicholas Petersen 20 August 2018 в 18:55
поделиться

У меня была та же проблема, но как только я создал HIDDEN FIELD для внешнего ключа ... все это работало просто отлично ...

ПРИМЕР ФОРМЫ:

@using (Html.BeginForm("save", "meter", FormMethod.Post))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    @Html.HiddenFor(model => Model.Entity.Id)
    @Html.HiddenFor(model => Model.Entity.DifferentialMeter.MeterId)
    @Html.HiddenFor(model => Model.Entity.LinearMeter.MeterId)
    @Html.HiddenFor(model => Model.Entity.GatheringMeter.MeterId)

    ... all your awesome controls go here ...
}

ПРИМЕР ДЕЙСТВИЯ:

// POST: /Meter/Save
[HttpPost]
public ActionResult Save(Meter entity)
{
    ... world-saving & amazing logic goes here ...
}

ПЕЧАТНЫЕ ИЗОБРАЖЕНИЯ:

0
ответ дан Prisoner ZERO 20 August 2018 в 18:55
поделиться
Другие вопросы по тегам:

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