没有机会覆盖 asp.net 核心 3.1 中 @Html.TextBoxFor 的名称属性
No opportunity to override name attribute for @Html.TextBoxFor in asp.net core 3.1
我们正在将项目从 .net Framework 4.72 迁移到 .net core 3.1。
我有下一个 html 帮助程序代码:
@Html.TextBoxFor(Model => Model.Property, "{0:0}", htmlAttributes: new { maxlength = 8, Name = "Model2.Property" })
但是当我检查 html 代码时,名称属性没有被覆盖。
我怎样才能覆盖它?
谢谢。
您可以使用 TextBox
:
@Html.TextBox("Model2.Property",Model.Property,new { maxlength = 8})
或使用 asp-for
和 name
:
<input asp-for="@Model.Property" name="Model2.Property" maxlength="8"/>
在表单中传递带有前缀的数据,并在操作中验证它(ModelState.IsValid'),然后return将错误消息显示到您的视图中,但我认为这不是一个好主意,我认为您在控制器操作中不需要前缀:
这是一个演示:
测试控制器:
public IActionResult TestPrefix([Bind(Prefix = "Model2")]DataModel model) {
if (ModelState.IsValid) {
return Ok("success");
}
string message=string.Join("; ", ModelState.Values
.SelectMany(x => x.Errors)
.Select(x => !string.IsNullOrWhiteSpace(x.ErrorMessage) ? x.ErrorMessage : x.Exception.Message.ToString()));
return Ok(message);
}
public IActionResult TestDataModel() {
return View();
}
TestDataModel.cshtml:
<form method="post">
@Html.TextBoxFor(Model => Model.Property, "{0:0}", htmlAttributes: new { maxlength = 8 })
<div style="color:red" id="errormessage">@TempData["Error"]</div>
<button onclick="postModel()">post</button>
</form>
@section scripts{
<script type="text/javascript">
function postModel() {
var formdata = new FormData();
formdata.append("Model2.Property", $("#Property").val());
$.ajax({
type: "POST",
url: '@Url.Action("TestPrefix", "Test")',
contentType: false,
processData: false,
data: formdata,
}).done(function (data) {
//$("#errormessage").append(data);
});
}
</script>
}
数据模型:
public class DataModel
{
[Required]
[Range(0,5)]
public int Property { get; set; }
}
结果:
我们正在将项目从 .net Framework 4.72 迁移到 .net core 3.1。
我有下一个 html 帮助程序代码:
@Html.TextBoxFor(Model => Model.Property, "{0:0}", htmlAttributes: new { maxlength = 8, Name = "Model2.Property" })
但是当我检查 html 代码时,名称属性没有被覆盖。 我怎样才能覆盖它? 谢谢。
您可以使用 TextBox
:
@Html.TextBox("Model2.Property",Model.Property,new { maxlength = 8})
或使用 asp-for
和 name
:
<input asp-for="@Model.Property" name="Model2.Property" maxlength="8"/>
在表单中传递带有前缀的数据,并在操作中验证它(ModelState.IsValid'),然后return将错误消息显示到您的视图中,但我认为这不是一个好主意,我认为您在控制器操作中不需要前缀:
这是一个演示:
测试控制器:
public IActionResult TestPrefix([Bind(Prefix = "Model2")]DataModel model) {
if (ModelState.IsValid) {
return Ok("success");
}
string message=string.Join("; ", ModelState.Values
.SelectMany(x => x.Errors)
.Select(x => !string.IsNullOrWhiteSpace(x.ErrorMessage) ? x.ErrorMessage : x.Exception.Message.ToString()));
return Ok(message);
}
public IActionResult TestDataModel() {
return View();
}
TestDataModel.cshtml:
<form method="post">
@Html.TextBoxFor(Model => Model.Property, "{0:0}", htmlAttributes: new { maxlength = 8 })
<div style="color:red" id="errormessage">@TempData["Error"]</div>
<button onclick="postModel()">post</button>
</form>
@section scripts{
<script type="text/javascript">
function postModel() {
var formdata = new FormData();
formdata.append("Model2.Property", $("#Property").val());
$.ajax({
type: "POST",
url: '@Url.Action("TestPrefix", "Test")',
contentType: false,
processData: false,
data: formdata,
}).done(function (data) {
//$("#errormessage").append(data);
});
}
</script>
}
数据模型:
public class DataModel
{
[Required]
[Range(0,5)]
public int Property { get; set; }
}
结果: