gpt4 book ai didi

c# - 模型的验证消息不会显示为 View 模型中的属性

转载 作者:太空宇宙 更新时间:2023-11-03 11:58:58 28 4
gpt4 key购买 nike

我一直在努力处理 asp.net 中的模型验证消息

我有一个 View 模型使用的模型。如果用户未填写必填字段,我希望我的 View 显示验证错误。

当必填字段未填写(预期行为)但我看不到时,我的 ModelState.IsValid 为假任何错误信息

我的模型类:

public class Model
{
[Required(ErrorMessage = "Name is required.")]
public string Name { get; set; }

[Required(ErrorMessage = "Adress is required.")]
public string Adress { get; set; }
}

我的 ViewModel 类:

public class ViewModel
{
[Required]
public Model SelectedModel { get; set; }

public string Title { get; set;}
}

我的 Controller :

        [HttpPost]
public ActionResult Create(ViewModel vm)
{
try
{
if (ModelState.IsValid)
{
bool result = *DatabaseStuff*
if(result == true)
{
return RedirectToAction("Index");
}
else
{
return View();
}
}
return RedirectToAction("Index",vm);
}
catch
{
return View();
}
}

我的看法

@model ViewModel

@using (Html.BeginForm("Create", "MyController", FormMethod.Post))
{
@Html.AntiForgeryToken()

<div class="box box-primary">
<div class="box-header with-border">
<h4 class="box-title">ViewModel Form</h4>
</div>
<div class="box-body">
<div class="row">
<div class="col-md-12">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })

<div class="form-group">
@Html.LabelFor(model => model.Title, htmlAttributes: new { @class = "control-label" })
@Html.EditorFor(model => model.Title, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.Title, "", new { @class = "text-danger" })
</div>

<div class="form-group">
@Html.LabelFor(model => model.SelectedModel.Name, htmlAttributes: new { @class = "control-label" })
@Html.EditorFor(model => model.SelectedModel.Name, null, "SelectedModel_Name",new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.SelectedModel.Name, "", new { @class = "text-danger", @data_valmsg_for = "SelectedModel_Name" })
</div>

<div class="form-group">
@Html.LabelFor(model => model.SelectedModel.Adress, htmlAttributes: new { @class = "control-label" })
@Html.EditorFor(model => model.SelectedModel.Adress, null, "SelectedModel_Adress",new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.SelectedModel.Adress, "", new { @class = "text-danger", @data_valmsg_for = "SelectedModel_Adress" })
</div>

</div>
</div>
</div>
<div class="form-group">
<div class="box-footer">
<input type="submit" value="Create" class="btn btn-success pull-right" />
</div>
</div>

</div>

}

谢谢。

最佳答案

我认为您应该在 ModelState 无效时返回 View。

  • Return View 不会发出新的请求,它只是渲染 View 无需更改浏览器地址栏中的 URL。

  • 返回 RedirectToAction 发出的新请求和浏览器中的 URL
    地址栏使用 MVC 生成的 URL 进行更新。

        try
    {
    if (ModelState.IsValid)
    {
    bool result = *DatabaseStuff*
    if(result == true)
    {
    return RedirectToAction("Index");
    }
    else
    {
    return View();
    }
    }
    return View();
    }

关于c# - 模型的验证消息不会显示为 View 模型中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57995497/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com