cshtml aspfor getter无法正常运行

时间:2019-07-03 12:59:13

标签: asp.net razor razor-pages

我尝试通过asp-for从cshtml页面到cshtml.cs页面获取输入数据。

cshtml

<div class="form-group">
    <label class="col-sm-2 control-label">Name</label>
    <div class="col-sm-10">
        <textarea name="InputNameEvent" asp-for="NameEvent" class="form-control" placeholder="Name"></textarea>
    </div>
</div>

cshtml.cs

[Required]
[MinLength(5)]
[MaxLength(1024)]
public string NameEvent { get; set; }

public string Name2;

public void OnGet()
{
  NameEvent = "Test";
}
 public void OnPost()
 {
     Name2 = NameEvent;
 }

测试显示在Textarea中,但在OnPost()中,NameEvent为NULL

2 个答案:

答案 0 :(得分:1)

我发现了我的错误。我需要在div周围放置<form method="post"></form>。我还需要在cshtml.cs中添加[BindProperty],并在cshtml中删除name属性。 感谢迈克:)

cshtml

<form method="post">
<div class="form-group">
    <label class="col-sm-2 control-label">Name</label>
    <div class="col-sm-10">
        <textarea asp-for="NameEvent" class="form-control" placeholder="Name"></textarea>
    </div>
</div>
</form>

cshtml.cs

[Required]
[MinLength(5)]
[MaxLength(1024)]
[BindProperty]
public string NameEvent { get; set; }

答案 1 :(得分:0)

如果希望表单值自动绑定到PageModel属性,则必须使用BindProperty属性修饰该属性:

[Required]
[MinLength(5)]
[MaxLength(1024)]
[BindProperty]
public string NameEvent { get; set; }

或者您可以添加多个用逗号分隔的属性:

[Required, MinLength(5), MaxLength(1024), BindProperty]
public string NameEvent { get; set; }

如果您使用标签帮助程序作为输入,请不要提供name属性。让标签助手自动生成一个,这将确保发布的值与属性名称匹配。目前,您的名称属性(name="InputNameEvent")与属性名称不匹配,因此模型绑定无法与发布到页面属性或参数的名称/值对匹配。

详细了解model binding to PageModel properties in Razor Pages here