gpt4 book ai didi

c# - 验证不同于页面 ViewModel 的 ViewModel

转载 作者:行者123 更新时间:2023-11-30 16:11:20 29 4
gpt4 key购买 nike

假设我有一个采用特定 ViewModel 的页面( View ):

@model IEnumerable<MyProject.ViewModels.MyViewModel>

在这个页面中,我有一个通过另一个 ViewModel(我们称之为 PostModel)发布数据的表单:

@using (Html.BeginForm("Order", "Order", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<h4>Give your order info</h4>
<hr />
@Html.ValidationSummary()
<div class="form-group">
<label for="Order.Name" class="col-md-2 control-label">Name:</label>

<div class="col-md-10">
@Html.TextBox("Order.Name", null, new { @class = "form-control" })
@Html.ValidationMessage("Order.Name")
</div>
</div>
...
}

这是在 Order HttpPost 操作方法中在 Controller 上处理的,该操作方法采用我的 PostModel 类型的参数。

我可以用上面的样式显示验证消息。我的问题是,如何(如果可能)为我的 PostModel 进行强类型化?像这样的东西:

@Html.TextBox<MyPostModel>(t => t.Order.Name, ...)
@Html.ValidationMessageFor<MyPostModel>(t => t.Order.Name)

在不更改页面的 ViewModel 的情况下,这是完全可能的吗?

最佳答案

您可以简单地为该表单使用不同的局部 View ,并且在该局部 View 中您可以将其指定为您想要的任何类型,在这种情况下,正如我在您的代码示例中看到的那样,Order

假设您有一个名为 Order 的模型,其定义如下

public class Order
{
public string Name { get; set; }
}

还有一个名为 _MyPostPartialView.cshtml 的局部 View 及其定义

@model Order

@using (Html.BeginForm("Order", "Order", FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
{
@Html.AntiForgeryToken()
<h4>Give your order info</h4>
<hr />
@Html.ValidationSummary()
<div class="form-group">
@Html.Label(m => m.Name, "Name:")

<div class="col-md-10">
@Html.TextBox(m => m.Name, null, new { @class = "form-control" })
@Html.ValidationMessage(m => m.Name)
</div>
</div>
...
}

大功告成!

关于c# - 验证不同于页面 ViewModel 的 ViewModel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24438661/

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