【发布时间】:2014-04-07 11:35:49
【问题描述】:
我有一个场景,我想向用户显示数据并允许他们修改它。为此,我有一个预置了当前对象值的表单。此表单包含在部分视图中,该部分视图又根据我的父对象有多少子对象在循环中调用。
我还在末尾提供了一个空表单,以允许用户创建此子项的新实例,所以简而言之,我有这样的内容:
编辑表单(部分视图):
@model WebPortal.Models.AddressModel
@using (Html.BeginForm("EditAddress", "MerchantDetailsEditor", FormMethod.Post))
{
@Html.ValidationSummary(true)
@Html.LabelFor(model => model.StreetNumber, new { id = Model.ID + "_streetnumber_label", Name = Model.ID + "_streetnumber_label", @for = Model.ID + "_streetnumber" })
@Html.TextBoxFor(address => address.StreetNumber, new { id = Model.ID + "_streetnumber", Name = Model.ID + "_streetnumber"})
@Html.ValidationMessageFor(address => address.StreetNumber)
创建表单(另一个局部视图)
@model WebPortal.Models.AddressModel
@{
int counter = 1;
}
@using (Html.BeginForm("AddAddress", "MerchantDetailsEditor", FormMethod.Post))
{
@Html.ValidationSummary(true)
@Html.LabelFor(model => model.StreetNumber, new { id = counter + "_streetnumber_label", Name = counter + "_streetnumber_label", @for = counter + "_streetnumber" })
@Html.TextBoxFor(address => address.StreetNumber, new { id = counter + "_streetnumber", Name = counter + "_streetnumber"})
@Html.ValidationMessageFor(address => address.StreetNumber)
counter++;
依次调用如下:
@foreach (WebPortal.Models.AddressModel address in @Model.Addresses)
{
@Html.Partial("Edit_Form", address)
}
@Html.Partial("Add_Form", new WebPortal.Models.AddressModel())
我面临的问题是,由于它们都共享相同的模型,因此验证错误将被应用并显示在我显示的所有实例旁边。所以如果我在哪里编辑一个对象,我会得到错误,因为另一个表单(添加表单)是空的。
我已经读到这是因为 MVC 在视图级别应用组件ID,所以由于我使用同一视图的多个实例,它们都获得相同的 ID。
为了解决这个问题,我覆盖了 ID 和 Name 的属性,但无济于事。
本质上,我只是希望将错误消息显示在适当的表单旁边。我对这种方法相当陌生,所以如果它不正确,请告诉我。我的目标是允许用户在特定屏幕上查看/编辑和创建数据。
谢谢!
【问题讨论】:
标签: c# asp.net-mvc asp.net-mvc-4 razor