编辑不在 URL 上传递 ID 的记录。我喜欢在编辑 GUI 的输入字段中指定 ID
Editing a record not passing an ID on the URL. I like to specify the ID in an Input field of the edit GUI
== 这是我的 C# 代码 ==
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using WorkCollaboration.Data;
using WorkCollaboration.Models;
namespace WorkCollaboration.Pages.LogonService
{
public class LoginCreateModel : PageModel
{
private readonly WorkCollaboration.Data.WorkCollaborationContext _context;
public LoginCreateModel(WorkCollaboration.Data.WorkCollaborationContext context)
{
_context = context;
}
[BindProperty]
public Models.LogonService LogonService { get; set; }
public async Task<IActionResult> OnGetAsync(string id)
{
if (id == null)
{
return Page();
}
LogonService = await _context.LogonService.FirstOrDefaultAsync(m => m.WorkColUserMail == id);
if (LogonService == null)
{
return NotFound();
}
return Page();
}
// To protect from overposting attacks, enable the specific properties you want to bind to, for
// more details, see https://aka.ms/RazorPagesCRUD.
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_context.Attach(LogonService).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!LogonServiceExists(LogonService.WorkColUserMail))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToPage("/LogonService/IndexLogin");
}
private bool LogonServiceExists(string id)
{
return _context.LogonService.Any(e => e.WorkColUserMail == id);
}
}
}
== 这是我的页面 ==
@page
@model WorkCollaboration.Pages.LogonService.LoginCreateModel
@{
ViewData["Title"] = "LoginCreate";
}
<h1>Edit</h1>
<h4>LogonService</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="LogonService.WorkColUserId" class="form-control" />
<input type="hidden" asp-for="LogonService.WorkColUserPassword" class="form-control" />
<input type="hidden" asp-for="LogonService.WorkColUserPasswordConfirm" class="form-control" />
<input type="hidden" asp-for="LogonService.WorkColUserName" class="form-control" />
<input type="hidden" asp-for="LogonService.WorkColUserVerificationMode" class="form-control" />
<input type="hidden" asp-for="LogonService.WorkColLoggedIn" value="true" class="form-control" />
<input type="hidden" asp-for="LogonService.WorkColUserSessionId" value="true" class="form-control" />
<div class="form-group">
<label asp-for="LogonService.WorkColUserMail" class="control-label"></label>
<input type="email" asp-for="LogonService.WorkColUserMail" class="form-control" />
<span asp-validation-for="LogonService.WorkColUserMail" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="LogonService.WorkColEnteredPassword" class="control-label"></label>
<input type="password" asp-for="LogonService.WorkColEnteredPassword" class="form-control" />
<span asp-validation-for="LogonService.WorkColEnteredPassword" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="LogonService.WorkColUserRememberMe" class="control-label"></label>
<input type="checkbox" asp-for="LogonService.WorkColUserRememberMe" class="form-control" />
<span asp-validation-for="LogonService.WorkColUserRememberMe" class="text-danger"></span>
</div>
<div class="form-group">
@Html.LabelFor(model => model.LogonService.WorkColUserLanguage, htmlAttributes: new { @class = "form-group" })
<div class="form-group">
@Html.DropDownListFor(model => model.LogonService.WorkColUserLanguage, new List<SelectListItem>
{
new SelectListItem {Text = "DE", Value = "DE", Selected = true },
new SelectListItem {Text = "EN", Value = "EN" },
}, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.LogonService.WorkColUserLanguage, "", new { @class = "text-danger" })
</div>
</div>
<button type="submit" value="Login" id="LogonService.WorkColUserMail" class="btn btn-primary">Login</button>
</form>
</div>
</div>
<div>
<a asp-page="/">Back to List</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
当我像这样传递 URL 时 "https://localhost:44379/LogonService/LoginCreate?id=christof.oberholzer@bbv.ch" 我可以获得记录并按照我的意愿进行更新。
!URL ID 1
我更改了我的代码(第 30 行),当 id 为空时我 returns 到页面。结果页面也弹出,我可以在字段中输入我的 ID(邮件),就像我想的那样。在页面的提交行中,我将值放入 Id。但是在 c# 代码中,Id 仍然为空。
请问如何传递id?谢谢
首先,你的表单方法是post,所以它会转到OnPost.Secondly,表单不会post button.You的id可以从LogonService获取WorkColUserMail。
这是一个演示:
登录服务:
public class LogonService
{
public string WorkColUserMail { get; set; }
}
登录创建模型:
public class LoginCreateModel : PageModel
{
[BindProperty]
public LogonService LogonService { get; set; }
public IActionResult OnGet(string id)
{
return Page();
}
public IActionResult OnPost()
{
string id = LogonService.WorkColUserMail;
return Page();
}
}
查看:
<form method="post" asp-page-id="LogonService.WorkColUserMail">
<div class="form-group">
<label asp-for="LogonService.WorkColUserMail" class="control-label"></label>
<input type="email" asp-for="LogonService.WorkColUserMail" class="form-control" />
<span asp-validation-for="LogonService.WorkColUserMail" class="text-danger"></span>
</div>
<button type="submit" value="Login" id="LogonService.WorkColUserMail" class="btn btn-primary">Login</button>
</form>
结果:
== 这是我的 C# 代码 ==
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.AspNetCore.Mvc.Rendering;
using Microsoft.EntityFrameworkCore;
using WorkCollaboration.Data;
using WorkCollaboration.Models;
namespace WorkCollaboration.Pages.LogonService
{
public class LoginCreateModel : PageModel
{
private readonly WorkCollaboration.Data.WorkCollaborationContext _context;
public LoginCreateModel(WorkCollaboration.Data.WorkCollaborationContext context)
{
_context = context;
}
[BindProperty]
public Models.LogonService LogonService { get; set; }
public async Task<IActionResult> OnGetAsync(string id)
{
if (id == null)
{
return Page();
}
LogonService = await _context.LogonService.FirstOrDefaultAsync(m => m.WorkColUserMail == id);
if (LogonService == null)
{
return NotFound();
}
return Page();
}
// To protect from overposting attacks, enable the specific properties you want to bind to, for
// more details, see https://aka.ms/RazorPagesCRUD.
public async Task<IActionResult> OnPostAsync()
{
if (!ModelState.IsValid)
{
return Page();
}
_context.Attach(LogonService).State = EntityState.Modified;
try
{
await _context.SaveChangesAsync();
}
catch (DbUpdateConcurrencyException)
{
if (!LogonServiceExists(LogonService.WorkColUserMail))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToPage("/LogonService/IndexLogin");
}
private bool LogonServiceExists(string id)
{
return _context.LogonService.Any(e => e.WorkColUserMail == id);
}
}
}
== 这是我的页面 ==
@page
@model WorkCollaboration.Pages.LogonService.LoginCreateModel
@{
ViewData["Title"] = "LoginCreate";
}
<h1>Edit</h1>
<h4>LogonService</h4>
<hr />
<div class="row">
<div class="col-md-4">
<form method="post">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<input type="hidden" asp-for="LogonService.WorkColUserId" class="form-control" />
<input type="hidden" asp-for="LogonService.WorkColUserPassword" class="form-control" />
<input type="hidden" asp-for="LogonService.WorkColUserPasswordConfirm" class="form-control" />
<input type="hidden" asp-for="LogonService.WorkColUserName" class="form-control" />
<input type="hidden" asp-for="LogonService.WorkColUserVerificationMode" class="form-control" />
<input type="hidden" asp-for="LogonService.WorkColLoggedIn" value="true" class="form-control" />
<input type="hidden" asp-for="LogonService.WorkColUserSessionId" value="true" class="form-control" />
<div class="form-group">
<label asp-for="LogonService.WorkColUserMail" class="control-label"></label>
<input type="email" asp-for="LogonService.WorkColUserMail" class="form-control" />
<span asp-validation-for="LogonService.WorkColUserMail" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="LogonService.WorkColEnteredPassword" class="control-label"></label>
<input type="password" asp-for="LogonService.WorkColEnteredPassword" class="form-control" />
<span asp-validation-for="LogonService.WorkColEnteredPassword" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="LogonService.WorkColUserRememberMe" class="control-label"></label>
<input type="checkbox" asp-for="LogonService.WorkColUserRememberMe" class="form-control" />
<span asp-validation-for="LogonService.WorkColUserRememberMe" class="text-danger"></span>
</div>
<div class="form-group">
@Html.LabelFor(model => model.LogonService.WorkColUserLanguage, htmlAttributes: new { @class = "form-group" })
<div class="form-group">
@Html.DropDownListFor(model => model.LogonService.WorkColUserLanguage, new List<SelectListItem>
{
new SelectListItem {Text = "DE", Value = "DE", Selected = true },
new SelectListItem {Text = "EN", Value = "EN" },
}, new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.LogonService.WorkColUserLanguage, "", new { @class = "text-danger" })
</div>
</div>
<button type="submit" value="Login" id="LogonService.WorkColUserMail" class="btn btn-primary">Login</button>
</form>
</div>
</div>
<div>
<a asp-page="/">Back to List</a>
</div>
@section Scripts {
@{await Html.RenderPartialAsync("_ValidationScriptsPartial");}
}
当我像这样传递 URL 时 "https://localhost:44379/LogonService/LoginCreate?id=christof.oberholzer@bbv.ch" 我可以获得记录并按照我的意愿进行更新。
!URL ID 1
我更改了我的代码(第 30 行),当 id 为空时我 returns 到页面。结果页面也弹出,我可以在字段中输入我的 ID(邮件),就像我想的那样。在页面的提交行中,我将值放入 Id。但是在 c# 代码中,Id 仍然为空。
请问如何传递id?谢谢
首先,你的表单方法是post,所以它会转到OnPost.Secondly,表单不会post button.You的id可以从LogonService获取WorkColUserMail。 这是一个演示:
登录服务:
public class LogonService
{
public string WorkColUserMail { get; set; }
}
登录创建模型:
public class LoginCreateModel : PageModel
{
[BindProperty]
public LogonService LogonService { get; set; }
public IActionResult OnGet(string id)
{
return Page();
}
public IActionResult OnPost()
{
string id = LogonService.WorkColUserMail;
return Page();
}
}
查看:
<form method="post" asp-page-id="LogonService.WorkColUserMail">
<div class="form-group">
<label asp-for="LogonService.WorkColUserMail" class="control-label"></label>
<input type="email" asp-for="LogonService.WorkColUserMail" class="form-control" />
<span asp-validation-for="LogonService.WorkColUserMail" class="text-danger"></span>
</div>
<button type="submit" value="Login" id="LogonService.WorkColUserMail" class="btn btn-primary">Login</button>
</form>
结果: