MVC Razor语法的一点研究(关于 @Html.ValidationSummary("",new { @class = "text-danger" }))

添加错误信息到前端

怎样从控制器后台添加错误信息到浏览器显示。


手工添加错误信息(在后台的控制器函数中如此添加),

ModelState.AddModelError("", "111111111");



这个会显示到@Html.ValidationSummary()

在 ASP.NET MVC 中,如果你想在 `LabelFor` 或 `DropDownListFor` 中设置默认值(如从 URL 参数 `ht` 和 `kh` 中获取的值),需要结合视图模型(`UploadViewModel`)和 Razor 视图的逻辑来实现。以下是具体步骤和代码示例: --- ### **问题分析** 1. 你的控制器有两个 `Index` 方法: - 一个接收 `ht` 和 `kh` 参数(用于 URL 传参)。 - 另一个返回默认的 `UploadViewModel`(包含 `ContractNumbers` 和 `ProductCodes`)。 2. 视图中使用了 `LabelFor` 和 `DropDownListFor`,但未处理从 URL 参数传递的默认值。 --- ### **解决方案** #### **1. 修改视图模型** 在 `UploadViewModel` 中添加属性,用于存储从 URL 传递的默认值: ```csharp public class UploadViewModel { public string ContractNumber { get; set; } // 用于绑定下拉框的选中值 public string ProductCode { get; set; } // 用于绑定下拉框的选中值 public IEnumerable<SelectListItem> ContractNumbers { get; set; } public IEnumerable<SelectListItem> ProductCodes { get; set; } } ``` #### **2. 修改控制器逻辑** 在接收 `ht` 和 `kh` 参数的 `Index` 方法中,将参数值赋给视图模型: ```csharp [HttpGet] public ActionResult Index(string ht, string kh) { var model = new UploadViewModel { ContractNumbers = GetContractNumbers(), ProductCodes = GetProductCodes(), ContractNumber = ht, // 设置合同号默认值 ProductCode = kh // 设置款号默认值 }; return View(model); } // 默认 Index 方法(无参数) public ActionResult Index() { var model = new UploadViewModel { ContractNumbers = GetContractNumbers(), ProductCodes = GetProductCodes() // ContractNumber 和 ProductCode 保持 null,下拉框显示默认提示 }; return View(model); } ``` #### **3. 修改视图代码** 在视图中,`DropDownListFor` 会自动根据 `model.ContractNumber` 和 `model.ProductCode` 的值设置默认选中项: ```html <div class="col-md-6"> <div class="form-group"> @Html.LabelFor(model => model.ContractNumber, "合同号", new { @class = "form-label fw-bold" }) @Html.DropDownListFor( model => model.ContractNumber, Model.ContractNumbers, "请选择合同号", // 当 model.ContractNumber 为 null 时显示此提示 new { @class = "form-select", id = "contractDropdown" } ) @Html.ValidationMessageFor(model => model.ContractNumber, "", new { @class = "text-danger" }) </div> </div> <div class="col-md-6"> <div class="form-group"> @Html.LabelFor(model => model.ProductCode, "款号", new { @class = "form-label fw-bold" }) @Html.DropDownListFor( model => model.ProductCode, Model.ProductCodes, "请选择款号", // 当 model.ProductCode 为 null 时显示此提示 new { @class = "form-select", id = "productDropdown" } ) @Html.ValidationMessageFor(model => model.ProductCode, "", new { @class = "text-danger" }) </div> </div> ``` --- ### **关键点说明** 1. **`DropDownListFor` 的默认值逻辑** - 如果 `model.ContractNumber` 有值(如从 URL 参数 `ht` 传递),则会自动选中对应的 `SelectListItem`。 - 如果 `model.ContractNumber` 为 `null`,则显示提示文本 `"请选择合同号"`。 2. **URL 参数传递示例** 访问以下 URL 时,下拉框会自动选中对应的值: ``` http://yourdomain.com/Controller/Index?ht=CONTRACT123&kh=PRODUCT456 ``` 3. **`LabelFor` 的默认值** `LabelFor` 仅用于显示标签文本(如 `"合同号"`),无法直接设置下拉框的默认值。默认值需通过视图模型的属性(如 `ContractNumber`)控制。 --- ### **完整流程** 1. 用户访问 `Index(ht, kh)` → 控制器将参数赋给视图模型 → 视图根据模型值渲染下拉框。 2. 用户访问无参数的 `Index()` → 视图模型属性为 `null` → 下拉框显示默认提示。 --- ### **额外建议** - 如果需要在 `LabelFor` 中动态显示默认值(如从 URL 参数获取的标签文本),可以通过 `ViewBag` 或直接修改模型属性实现: ```csharp // 控制器中 ViewBag.ContractLabel = !string.IsNullOrEmpty(ht) ? "合同号(已预设)" : "合同号"; ``` ```html <!-- 视图中 --> @Html.LabelFor(model => model.ContractNumber, ViewBag.ContractLabel as string, new { @class = "form-label fw-bold" }) ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值