将数据从视图传递到控制器 asp.net 核心剃须刀页面
Passing data from view to controller asp.net core razor pages
我正在尝试创建一个简单的 asp.net 核心剃须刀网站。
我有一个 cshtml 页面:
@page
@using RazorPages
@model IndexModel
@using (Html.BeginForm()) {
<label for="age">How old are you?</label>
<input type="text" asp-for="age">
<br/>
<label for="money">How much money do you have in your pocket?</label>
<input type="text" asp-for="money">
<br/>
<input type="submit" id="Submit">
}
和一个cs文件:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System;
using System.Threading.Tasks;
namespace RazorPages
{
public class IndexModel : PageModel
{
protected string money { get; set; }
protected string age { get; set; }
public IActionResult OnPost()
{
if (!ModelState.IsValid)
{
return Page();
}
return RedirectToPage("Index");
}
}
}
我希望能够将年龄和金钱传递给cs文件,然后再传递回cshtml文件,以便在提交按钮发送get请求后显示在页面上。我该如何实施?
更新:
以下代码不起作用。
index.cshtml.cs:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System;
using System.Threading.Tasks;
namespace RazorPages
{
public class IndexModel : PageModel
{
[BindProperty]
public decimal Money { get; set; }
[BindProperty]
public int Age { get; set; }
public IActionResult OnPost()
{
/* if (!ModelState.IsValid)
{
return Page();
}*/
this.Money = Money;
this.Age = Age;
System.IO.File.WriteAllText(@"C:\Users\Administrator\Desktop\murach\exercises\WriteText.txt",
this.Money.ToString());
return RedirectToPage("Index", new { age = this.Age, money = this.Money});
}
}
}
和index.cshtml:
@page
@using RazorPages
@model IndexModel
@using (Html.BeginForm()) {
<label for="Age">How old are you?</label>
<input type="text" asp-for="Age">
<br/>
<label for="Money">How much money do you have in your pocket?</label>
<input type="text" asp-for="Money">
<br/>
<input type="submit" id="Submit">
}
Money: @Model.Money
Age: @Model.Age
无论您输入什么内容,金钱和年龄在页面和文件中都显示为 0。
在您的 .cshtml 文件中附加输出您通过 POST 填充的值的代码。
MyPage.cshtml
@page
@model IndexModel
@using (Html.BeginForm())
{
<label for="Age">How old are you?</label>
<input type="text" asp-for="Age">
<br />
<label for="Money">How much money do you have in your pocket?</label>
<input type="text" asp-for="Money">
<br />
<input type="submit" id="Submit">
}
Money: @Model.Money
Age: @Model.Age
现在将 [BindProperty]
添加到模型中的每个 属性,您希望从 OnPost()
:
更新
[BindProperty]
public int Age { get; set; }
[BindProperty]
public decimal Money { get; set; }
此外,正如 Bart Calixto 指出的那样,这些属性必须是 public 才能从您的 Page
.
访问
OnPost()
方法非常简单,因为 ASP.NET 核心在后台完成所有工作(感谢通过 [BindProperty]
进行绑定)。
public IActionResult OnPost()
{
return Page();
}
现在,您可以点击 Submit
瞧,页面应该如下所示:
顺便说一句:属性是用 capital letter in the beginning.
写的
我正在尝试创建一个简单的 asp.net 核心剃须刀网站。
我有一个 cshtml 页面:
@page
@using RazorPages
@model IndexModel
@using (Html.BeginForm()) {
<label for="age">How old are you?</label>
<input type="text" asp-for="age">
<br/>
<label for="money">How much money do you have in your pocket?</label>
<input type="text" asp-for="money">
<br/>
<input type="submit" id="Submit">
}
和一个cs文件:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System;
using System.Threading.Tasks;
namespace RazorPages
{
public class IndexModel : PageModel
{
protected string money { get; set; }
protected string age { get; set; }
public IActionResult OnPost()
{
if (!ModelState.IsValid)
{
return Page();
}
return RedirectToPage("Index");
}
}
}
我希望能够将年龄和金钱传递给cs文件,然后再传递回cshtml文件,以便在提交按钮发送get请求后显示在页面上。我该如何实施?
更新: 以下代码不起作用。 index.cshtml.cs:
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using System;
using System.Threading.Tasks;
namespace RazorPages
{
public class IndexModel : PageModel
{
[BindProperty]
public decimal Money { get; set; }
[BindProperty]
public int Age { get; set; }
public IActionResult OnPost()
{
/* if (!ModelState.IsValid)
{
return Page();
}*/
this.Money = Money;
this.Age = Age;
System.IO.File.WriteAllText(@"C:\Users\Administrator\Desktop\murach\exercises\WriteText.txt",
this.Money.ToString());
return RedirectToPage("Index", new { age = this.Age, money = this.Money});
}
}
}
和index.cshtml:
@page
@using RazorPages
@model IndexModel
@using (Html.BeginForm()) {
<label for="Age">How old are you?</label>
<input type="text" asp-for="Age">
<br/>
<label for="Money">How much money do you have in your pocket?</label>
<input type="text" asp-for="Money">
<br/>
<input type="submit" id="Submit">
}
Money: @Model.Money
Age: @Model.Age
无论您输入什么内容,金钱和年龄在页面和文件中都显示为 0。
在您的 .cshtml 文件中附加输出您通过 POST 填充的值的代码。
MyPage.cshtml
@page
@model IndexModel
@using (Html.BeginForm())
{
<label for="Age">How old are you?</label>
<input type="text" asp-for="Age">
<br />
<label for="Money">How much money do you have in your pocket?</label>
<input type="text" asp-for="Money">
<br />
<input type="submit" id="Submit">
}
Money: @Model.Money
Age: @Model.Age
现在将 [BindProperty]
添加到模型中的每个 属性,您希望从 OnPost()
:
[BindProperty]
public int Age { get; set; }
[BindProperty]
public decimal Money { get; set; }
此外,正如 Bart Calixto 指出的那样,这些属性必须是 public 才能从您的 Page
.
OnPost()
方法非常简单,因为 ASP.NET 核心在后台完成所有工作(感谢通过 [BindProperty]
进行绑定)。
public IActionResult OnPost()
{
return Page();
}
现在,您可以点击 Submit
瞧,页面应该如下所示:
顺便说一句:属性是用 capital letter in the beginning.
写的