URL@Context.Request.Query
URL @Context.Request.Query
我想添加 URL @Context.Request.Query 以便 URL 自动填写文本框。但是当我为自动化添加 URL @Context.Request.Query[] 时,哪些列数据会消失。例如,当我自动化 Textbox[Name],[ID] 而不是勾选 IsAccept 并转到 sumbit 时。 [Name] 和 [ID] 列将消失。但如果我取消使用@Context.Request.Query[]。这是正常的。例如,我手动将数据输入到文本框[名称]、[ID],而不是勾选 IsAccept 并转到 sumbit。 [Name] 和 [ID] 列将保留所有数据。
谁能给点建议和帮助?非常感谢!
Controller
public class CheckBoxRequired : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
//get the entered value
var student = (UserViewModel)validationContext.ObjectInstance;
//Check whether the IsAccepted is selected or not.
if (student.IsAccepted == false)
{
return new ValidationResult(ErrorMessage == null ? "Please checked the checkbox" ErrorMessage);
}
return ValidationResult.Success;
}
}
Controller
public IActionResult CreateUser()
{
return View();
}
[HttpPost]
public IActionResult CreateUser(UserViewModel user)
{
if (ModelState.IsValid)
{
//after validation success, create a UserClass instance based on the ViewModel, and insert the "newuser" into database.
var newuser = new UserClass();
newuser.ID = user.ID;
newuser.Name = user.Name;
//save the newuser into the database via dbcontext
_dbcontext.UserClass.Add(newuser);
_dbcontext.SaveChanges();
return RedirectToAction(nameof(Index));
}
return View();
}
View:
@model WebApplication2.Models.UserViewModel
@{
ViewData["Title"] = "CreateUser";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="row">
<div class="col-md-6">
<form asp-action="CreateUser">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="ID" class="control-label"></label>
<input asp-for="ID" class="form-control"value="@Context.Request.Query["ID"]" />
<span asp-validation-for="ID" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control"
value="@Context.Request.Query["Name"]"/>
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group form-check">
<label class="form-check-label">
<input class="form-check-input" asp-for="IsAccepted" />
</label>
<span asp-validation-for="IsAccepted" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
Models
public class UserViewModel
{
[Required(ErrorMessage = "Entry ID")]
public int ID { get; set; }
[Required(ErrorMessage = "Entry Name")]
public string Name { get; set; }
//use custom validation method
[CheckBoxRequired(ErrorMessage ="Please checked the items")]
public bool IsAccepted { get; set; }
}
根据你在评论中告诉我的,我强烈建议你在控制器中这样做你应该把它改成这样
[HttpGet]
public IActionResult CreateUser(string name)
{
return View();
}
那么你有2个选择,
你填写一个视图模型,然后将它发送到视图,或者选项编号
[HttpGet]
public IActionResult CreateUser(string name)
{
UserViewModel vm = new UserViewModel { Name = name };
return View(vm);
}
在视图中用 value="@Model.Name"
替换 value="@Context.Request.Query["Name"]"
你填充viewbag然后在View上消费它
[HttpGet]
public IActionResult CreateUser(string name)
{
ViewBag.Name = name;
return View();
}
在视图中用 value="@(ViewBag.Name as string)"
替换 value="@Context.Request.Query["Name"]"
在这种特殊情况下,它实际上可以在不转换 ViewBag 的情况下工作,所以它可能只是 value="@ViewBag.Name"
GIF1:
https://i.stack.imgur.com/qGrwz.gif
GIF1:当我将 value="@Context.Request.Query["Name"]" 添加到输入 asp-for="Name" class="form-control" 时。
它会导致所有列数据消失。
GIF2
https://i.stack.imgur.com/vGmHU.gif
当我添加 value="@Context.Request.Query["Name"]" 到输入 asp-for="Name" class="form -控制”。
所有列数据应保留
谢谢!
我想添加 URL @Context.Request.Query 以便 URL 自动填写文本框。但是当我为自动化添加 URL @Context.Request.Query[] 时,哪些列数据会消失。例如,当我自动化 Textbox[Name],[ID] 而不是勾选 IsAccept 并转到 sumbit 时。 [Name] 和 [ID] 列将消失。但如果我取消使用@Context.Request.Query[]。这是正常的。例如,我手动将数据输入到文本框[名称]、[ID],而不是勾选 IsAccept 并转到 sumbit。 [Name] 和 [ID] 列将保留所有数据。
谁能给点建议和帮助?非常感谢!
Controller
public class CheckBoxRequired : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
//get the entered value
var student = (UserViewModel)validationContext.ObjectInstance;
//Check whether the IsAccepted is selected or not.
if (student.IsAccepted == false)
{
return new ValidationResult(ErrorMessage == null ? "Please checked the checkbox" ErrorMessage);
}
return ValidationResult.Success;
}
}
Controller
public IActionResult CreateUser()
{
return View();
}
[HttpPost]
public IActionResult CreateUser(UserViewModel user)
{
if (ModelState.IsValid)
{
//after validation success, create a UserClass instance based on the ViewModel, and insert the "newuser" into database.
var newuser = new UserClass();
newuser.ID = user.ID;
newuser.Name = user.Name;
//save the newuser into the database via dbcontext
_dbcontext.UserClass.Add(newuser);
_dbcontext.SaveChanges();
return RedirectToAction(nameof(Index));
}
return View();
}
View:
@model WebApplication2.Models.UserViewModel
@{
ViewData["Title"] = "CreateUser";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<div class="row">
<div class="col-md-6">
<form asp-action="CreateUser">
<div asp-validation-summary="ModelOnly" class="text-danger"></div>
<div class="form-group">
<label asp-for="ID" class="control-label"></label>
<input asp-for="ID" class="form-control"value="@Context.Request.Query["ID"]" />
<span asp-validation-for="ID" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control"
value="@Context.Request.Query["Name"]"/>
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group form-check">
<label class="form-check-label">
<input class="form-check-input" asp-for="IsAccepted" />
</label>
<span asp-validation-for="IsAccepted" class="text-danger"></span>
</div>
<div class="form-group">
<input type="submit" value="Create" class="btn btn-primary" />
</div>
</form>
</div>
</div>
Models
public class UserViewModel
{
[Required(ErrorMessage = "Entry ID")]
public int ID { get; set; }
[Required(ErrorMessage = "Entry Name")]
public string Name { get; set; }
//use custom validation method
[CheckBoxRequired(ErrorMessage ="Please checked the items")]
public bool IsAccepted { get; set; }
}
根据你在评论中告诉我的,我强烈建议你在控制器中这样做你应该把它改成这样
[HttpGet]
public IActionResult CreateUser(string name)
{
return View();
}
那么你有2个选择,
你填写一个视图模型,然后将它发送到视图,或者选项编号
[HttpGet] public IActionResult CreateUser(string name) { UserViewModel vm = new UserViewModel { Name = name }; return View(vm); }
在视图中用
替换value="@Model.Name"
value="@Context.Request.Query["Name"]"
你填充viewbag然后在View上消费它
[HttpGet] public IActionResult CreateUser(string name) { ViewBag.Name = name; return View(); }
在视图中用
替换value="@(ViewBag.Name as string)"
value="@Context.Request.Query["Name"]"
在这种特殊情况下,它实际上可以在不转换 ViewBag 的情况下工作,所以它可能只是 value="@ViewBag.Name"
GIF1: https://i.stack.imgur.com/qGrwz.gif
GIF1:当我将 value="@Context.Request.Query["Name"]" 添加到输入 asp-for="Name" class="form-control" 时。 它会导致所有列数据消失。
GIF2 https://i.stack.imgur.com/vGmHU.gif
当我添加 value="@Context.Request.Query["Name"]" 到输入 asp-for="Name" class="form -控制”。 所有列数据应保留
谢谢!