【问题标题】:empty model submitted from the form从表单提交的空模型
【发布时间】:2016-06-03 22:59:29
【问题描述】:

我正在使用 Asp.Net Core 的最新预览版。我有一个页面,其中包含非常简单的编辑表单并显示了一些附加数据。

@model SeasonFullDetailsViewModel

.....

<form asp-action="Save">
    <div class="form-horizontal">
        <hr />
        <div asp-validation-summary="ModelOnly" class="text-danger"></div>
        <input type="hidden" asp-for="SeasonId" />
        <div class="form-group">
            <label asp-for="Season" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="Season" class="form-control" />
                <span asp-validation-for="Season" class="text-danger" />
            </div>
        </div>
        <div class="form-group">
            <label asp-for="IsFinal" class="col-md-2 control-label"></label>
            <div class="col-md-10">
                <input asp-for="IsFinal" class="form-control" />
                <span asp-validation-for="IsFinal" class="text-danger" />
            </div>
        </div>
        <div class="form-group">
            <div class="col-md-offset-2 col-md-10">
                <input type="submit" value="Save" class="btn btn-default" />
            </div>
        </div>
    </div>
</form>

问题是我无法将表单数据提交到模型中,只能作为单独的字段。

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Save(int seasonId, string season, bool isFinal)
{
    // values are ok
    return new EmptyResult();
}

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Save(SeasonFullDetailsViewModel season)
{
    // empty values inside season
    return new EmptyResult();
}

我认为问题在于模型使用继承并且表单中的数据包含在父类中。

public class SeasonFullDetailsViewModel : SeasonDetailsViewModel
{
    // some data here
}


public class SeasonDetailsViewModel : SeasonBaseViewModel
{   
    public bool IsFinal { get; set; }

    // also some other data
}


public class SeasonBaseViewModel
{
    public int SeasonId { get; set; }

    public string Season { get; set; }

    // and some more data
}

我尝试过使用更简单的模型,但它也不起作用。

[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult Save(SeasonEditModel season)
{
    // empty values inside season
    return new EmptyResult();
}

public class SeasonEditModel
{
    public int SeasonId { get; set; }

    public string Season { get; set; }

    public bool IsFinal { get; set; }
}

我知道我可以使用 Ajax 发送数据或从单独的字段创建所需的模型,但我想找出这里的问题以及是否有办法克服它。为什么使用 SeasonEditModel 的解决方案不起作用?

【问题讨论】:

标签: forms asp.net-core asp.net-core-mvc asp.net-core-1.0


【解决方案1】:

此处已回答:asp.Net MVC view model is empty on post

按照惯例,您需要使用与视图模型名称相同的参数名称。你有:

public IActionResult Save(SeasonFullDetailsViewModel season)

如果您更改参数名称以匹配这样,它应该可以工作:

public IActionResult Save(SeasonFullDetailsViewModel seasonFullDetailsViewModel)

【讨论】:

  • 最好至少能看到一条调试消息,提示找不到名为“seasonFullDetailsViewModel”的模型。它有帮助,谢谢。实际上我可以选择任何模型类型,只要它有正确的名称。
  • 这是错误的。您确实 需要使用与视图模型名称相同的参数名称。它不能与模型中的属性同名。
【解决方案2】:

我相信贾斯汀的回答是正确的,但有一点区别:模型变量命名约定只有在您通过 HTML 表单发布向控制器操作发布数据时才会发挥作用。

如果您通过手动构建自己的发布数据结构而不是通过表单集合将数据发布到操作,则情况并非如此。
例如。 AJAX 调用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    相关资源
    最近更新 更多