gpt4 book ai didi

c# - ASP.NET MVC 4 : Skip Validation in Child Object

转载 作者:太空狗 更新时间:2023-10-30 00:53:36 26 4
gpt4 key购买 nike

首先,抱歉我的英语不好。不是我的母语。

我有一个名为 Category 的类,如下面的代码所示。请注意,在这段代码中,我还有一个 Category 属性,我可以在其中引用父类别。它只是在类中声明的同一个类。就像盗梦空间一样。所以,这个父类别对象具有与“声明他的类”相同的属性。

属性 Name 是必需的。记住这个属性。

public class Category
{
public int? Id{ get; set; }

[DisplayName("Father Category")] //NOT REQUIRED
public Category Father { get; set; }

[DisplayName("Category")]
[Required(ErrorMessage = "Name is required")] //REMEMBER THIS REQUIRED PROPERTY!!
public string Name { get; set; }

[DisplayName("Status")]
public bool Status { get; set; }

[DisplayName("Description")]
public string Description { get; set; }
}

那是我的类(class)。

所以,在类别 View 中,我可以这样做:

注意:CompleteEditorForCompleteDropDownListFor 是扩展方法,在每个字段中添加一些额外的 html,仅用于调整布局。

@using (Html.BeginForm(null, null, FormMethod.Post))
{

@Html.CompleteEditorFor(x => x.Name)
@Html.CompleteEditorFor(x => x.Description)
@Html.CompleteEditorFor(x => x.Status)

@Html.CompleteDropDownListFor(x => x.Father.Id, ViewData["Categories"], "Id", "Name", "Select...")

@Html.SubmitButton()
}

上面的代码运行得很好。

问题来了:

当我点击“保存”按钮时,它生成了一个HttpPost,这是它的Action:

(下面的代码有一些修改的消息字符串和扩展的方法。)(CategoriesBLL 是从数据库中获取类别的类。)

    [HttpPost]
public ActionResult New(Category item)
{
ViewData.Add("Categories", CategoriesBLL.select());
try
{
if (ModelState.IsValid)//PROBLEM IS HERE!!!!!!!!!
{
if (CategoryBLL.insert(item) != 0)
{

ViewData.AddSuccess("Some Success Message");


return View(new Category());
}
else
{
ModelState.AddError("Some error message");
return View(item);
}
}
else
{
ModelState.AddError("Some SERIOUS error message");
return View(item);
}
}
catch (Exception ex)
{
ModelState.AddError("Some EVEN MORE SERIOUS message");
return View(item);
}

}

问题出在 if (ModelState.IsValid) 行。

为什么?

因为我的 Category 类有一个名为 Name 的必需属性。我不需要此属性来执行我正在做的事情,我只需要 Father 属性的 Id。我可以在 View 的这一行中获取此 Id:

@Html.CompleteDropDownListFor(x => x.Father.Id, ViewData["Categories"], "Id", "Name", "Select...")

那行得通。

但是 Name 属性为 null,并且是必需的,但它仅在我通知 Child 类时才是必需的。不是父类。

我什至不知道如何在 Google 或 StackOverflow 上搜索它...

谁能帮帮我?

最佳答案

您需要使用 View Models .您的 View 模型应该包含您在 View 中需要的所有字段,减去 Father 属性。然后在您的 Controller 中,您需要将 View 模型映射到您的模型。您可以使用 Automapper 轻松做到这一点. (但是,不推荐直接从 View 映射到领域模型,稍后你会整理)

我知道,乍一看这可能看起来很麻烦,但请相信我。您的 View 与您的域模型不同。接下来你会知道,你需要在你的 View 上使用某种下拉菜单,以及你的域模型中没有的其他一些额外的复选框。此外,如果您使用 View 模型,您的安全性将会提高。如果有兴趣,我会为您提供一些相关信息。

关于c# - ASP.NET MVC 4 : Skip Validation in Child Object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15579006/

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