【问题标题】:.NET Core MVC form passing model with null properties具有空属性的 .NET Core MVC 表单传递模型
【发布时间】:2018-03-14 17:29:40
【问题描述】:

我有一个表单,假设将我的Encounter 模型传递给我的CharacterControllerCreateCharacter 操作方法。

这是表格:

<form asp-action="CreateCharacter" asp-controller="Character" data-ajax="true" data-ajax-mode="replace" data-ajax-update="#character-container">
    <button class="btn btn-default" type="submit">Create Chracter</button>
</form>

这是控制器方法:

public ActionResult CreateCharacter(Encounter encounter)
{
    Character character = new Character { Encounter = encounter };
    return PartialView("Add", character);
}

encounter 的所有属性在不应该为 null 时都为 null。澄清一下,Encounter 是表单所在视图的模型。在这个视图中,我使用了EncounterName 属性,它工作正常。但是,当我将模型传递给控制器​​时,Name 属性现在为空。

我很困惑为什么会发生这种情况,因为我在其他地方有一个非常相似的表格可以很好地通过模型。

【问题讨论】:

  • 该表单如何填充模型?没有输入字段。表单应该填充哪些字段?
  • 我正在使用表单作为解决方法,以便在单击按钮时将模型发送到控制器。这可能是我的问题吗?
  • 但是没有东西可以发送。该表单只有一个提交按钮。它不发送任何数据,因为没有输入字段来表示要发送的数据。如果它什么都不发送,那么该操作将获得一个空值。
  • 这是有道理的。我现在添加了隐藏输入来传递属性。谢谢你。如果您不介意我问,是使用表单将模型传递给控制器​​的最佳实践吗?
  • 这通常是它们提交给控制器的方式。

标签: c# razor asp.net-core asp.net-core-mvc


【解决方案1】:

没有数据提交给控制器。

该表单只有一个提交按钮。

它没有发送任何数据,因为没有输入字段来表示要发送的模型。

如果它什么都不发送,那么该操作将获得一个空值。

确保要发送的值与要发送的模型的属性相匹配。

<form asp-action="CreateCharacter" asp-controller="Character" data-ajax="true" 
        data-ajax-mode="replace" data-ajax-update="#character-container">

    <input type="hidden" name="propertyName" value="propertyValue">

    <!--
    <input ... />
    <input ... />
    <input ... />
    -->     

    <button class="btn btn-default" type="submit">Create Chracter</button>
</form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 2015-10-02
    • 2020-11-02
    • 1970-01-01
    相关资源
    最近更新 更多