因為我需要在具有許多不同模型和視圖的許多不同表中創建我的用戶資訊我在地址頁面中使用了此代碼但如我的評論所示我在發布功能中丟失了用戶資訊我的問題是為什么以及該怎么做? ???? 順便說一下,當我將 User1 區分從我的 OnGet 函式復制到 OnPost 函式時,此代碼完美地作業,如我的評論中所述,但我仍然想了解為什么公共財產會丟失資訊,請閱讀我的評論
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using RazorPagesUI.Models;
namespace RazorPagesUI.Pages.Forms
{
partial class AddAddressModel : PageModel
{
private readonly ILogger<IndexModel> _logger;
public AddAddressModel(ILogger<IndexModel> logger)
{
_logger = logger;
}
[BindProperty(SupportsGet = true)]
public string Mail { get; set; }
public IEnumerable<SelectListItem>? Country { get; set; }
[BindProperty]
public AddressModel? Address { get; set; }
public string SelectedString { get; set; }
public UserModel User1 { get; set; }=new UserModel();
public void OnGet()
{
List<string> TagIds = Mail.Split(',').ToList();
Int32.TryParse(TagIds[0], out int j);
User1.Id = j;
User1.Email = TagIds[1];
User1.FirstName = TagIds[2];
User1.LastName = TagIds[3];
User1.Password = TagIds[4]
Country = new SelectListItem[]
{
new SelectListItem ("Canada", "Canada"),
new SelectListItem ("Egypt", "Egypt"),
new SelectListItem ( "Usa", "Usa")
};
}
public IActionResult OnPost()
{
//when I get to here User1 is null
Address.Country = Request.Form["country"];
if (ModelState.IsValid == false)
{
return Page();
}
//I need to insert my user info to my user table but User1 is null
//here I insert Address info
return RedirectToPage("/index", new{ Name = User1.Firstname);//User1
becomes Null
}
}
}
cshtml 檔案被要求包含在我的帖子中
@page
@using RazorPagesUI.Models
@model RazorPagesUI.Pages.Forms.AddAddressModel
@{
ViewData["Title"] = "Add Address";
}
<b>Adderres for: @Model.User1.FirstName @Model.User1.LastName</b>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" />
<div class="text-center">
<h1>Add Address</h1>
</div>
<form method="post">
<div class="container-fluid">
<div class="p-1">
<div class="text-center">
<select name = "country" asp-items="@Model.Country">
</select>
</div>
</div>
<div class="text-center">
<div class="p-1">
<input type="text" asp-for="Address.State" />
</div>
</div>
<div class="text-center">
<div class="p-1">
<input type="text" asp-for="Address.City"
/>
</div>
</div>
<div class="text-center">
<div class="p-1">
<input type="text" asp-for="Address.StreetNumber"
placeholder="Street #" />
</div>
</div>
<div class="text-center">
<div class="p-1">
<input type="text" asp-for="Address.StreetName"
placeholder="Street Name" />
</div>
</div>
<div class="text-center">
<div class="p-1">
<div class="text-center">
<div class="p-1">
<input type="text" asp-for="Address.AppNumber"
placeholder="App#" />
</div>
</div>
<div class="text-center">
<div class="p-1">
<input type="text" asp-for="Address.ZipCode" />
</div>
</div>
<div class="p-1">
<div class="text-center">
<input type="tel" asp-for="Address.Phone" />
</div>
</div>
<div class="p-1">
<div class="text-center">
<input type="tel" asp-for="Address.CellPhone" />
</div>
</div>
<div class="text-center">
<div class="p-1">
<button type="submit">Submit</button>
</div>
</div>
</div>
</form>
uj5u.com熱心網友回復:
首先,您需要User1.FirstName在表單發布時傳遞,以便您可以進入User1.FirstNameOnPost 處理程式。
表單(添加隱藏輸入User1.FirstName):
<form method="post">
<div class="container-fluid">
<div class="p-1">
<div class="text-center">
<select name = "country" asp-items="@Model.Country">
</select>
</div>
</div>
<div class="text-center">
<div class="p-1">
<input type="text" asp-for="Address.State" />
</div>
</div>
<div class="text-center">
<div class="p-1">
<input type="text" asp-for="Address.City"
/>
</div>
</div>
<div class="text-center">
<div class="p-1">
<input type="text" asp-for="Address.StreetNumber"
placeholder="Street #" />
</div>
</div>
<div class="text-center">
<div class="p-1">
<input type="text" asp-for="Address.StreetName"
placeholder="Street Name" />
</div>
</div>
<div class="text-center">
<div class="p-1">
<div class="text-center">
<div class="p-1">
<input type="text" asp-for="Address.AppNumber"
placeholder="App#" />
</div>
</div>
<div class="text-center">
<div class="p-1">
<input type="text" asp-for="Address.ZipCode" />
</div>
</div>
<div class="p-1">
<div class="text-center">
<input type="tel" asp-for="Address.Phone" />
</div>
</div>
<div class="p-1">
<div class="text-center">
<input type="tel" asp-for="Address.CellPhone" />
</div>
</div>
<div class="text-center">
<div class="p-1">
<input type="hidden" asp-for="User1.FirstName" />
<button type="submit">Submit</button>
</div>
</div>
</div>
</form>
cshtml.cs(如果要將資料系結到User1,則需要使用[BindProperty],以便User1.Firstname在OnPost處理程式中使用):
[BindProperty]
public UserModel User1 { get; set; } = new UserModel();
uj5u.com熱心網友回復:
您必須顯示您的 cshtml 檔案,即 Razor 頁面的前端,以便更清楚地描述您的問題。但總的來說,我看到您正在嘗試系結一個稱為型別Country的復雜物件的屬性在這種情況下,您的 cshtml 檔案中輸入/選擇的名稱應反映物件目標屬性的復雜路徑. 它應該是這樣的注意元素的名稱,即它反映了目標屬性的完整路徑。有關 razor 頁面中復雜模型系結的更多資訊https://www.learnrazorpages.com/razor-pages/model-binding如果您設法正確系結復雜物件的屬性,這行代碼AddressAddressModelCountryAddress<select name="Address.Country" asp-items="Model.Country"></select>selectAddress.CountryAddress.Country = Request.Form["country"];變得多余。的值Address.Country應自動填充。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/401921.html
標籤:C# asp.net-mvc asp.net核心 剃刀页面
