我有一个场景,希望向用户展示数据并允许他们修改。为此,我有一个预设了当前对象值的表单。这个表单被包含在一个部分视图中,根据我的父对象有多少子对象而被调用循环。
同时,我还提供了一个空表单,以便用户创建这个子项的新实例。简而言之,我的形式如下:
编辑表单(一个部分视图):
我面临的问题是,由于它们都共享同一模型,验证错误被应用并显示在我展示的所有实例旁边。因此,如果我要编辑一个对象,我会得到错误,因为另一个表单(添加表单)为空。
我已经阅读过,这是因为MVC将组件ID应用于视图级别,因此,由于我正在使用多个相同视图的实例,它们都获得相同的ID。
为了解决这个问题,我覆盖了ID和名称的属性,但没有成功。
基本上,我只想在适当的表单旁边显示错误消息。我对这种方法还不是很熟悉,所以如果有不正确的地方,请告诉我。我的目标是允许用户在特定屏幕上查看/编辑和创建数据。
谢谢!
同时,我还提供了一个空表单,以便用户创建这个子项的新实例。简而言之,我的形式如下:
编辑表单(一个部分视图):
@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和名称的属性,但没有成功。
基本上,我只想在适当的表单旁边显示错误消息。我对这种方法还不是很熟悉,所以如果有不正确的地方,请告诉我。我的目标是允许用户在特定屏幕上查看/编辑和创建数据。
谢谢!