gpt4 book ai didi

c# - POST 上 PartialViews 的绑定(bind)模型

转载 作者:太空宇宙 更新时间:2023-11-03 12:57:49 25 4
gpt4 key购买 nike

我有一个复杂的模型类:

public class Client
{
public string Name { get; set; }
public Address Address { get; set; }
}

public class Address
{
public string AddressLine { get; set; }
}

我的 View 由几个部分组成,我将部分模型传递给它们并配置一些字段进行编辑:

在 Index.cshtml 中

@using (Html.BeginForm("Index"))
{
@Html.DisplayNameFor(modelItem => model.Name)
@Html.DisplayFor(modelItem => model.Name)
<div id="divAddress">
@Html.Action("_Address", model.Address)
</div>
<div>RESULT MESSAGE GOES HERE!</div>
<input type="submit" value="Submit" />
}

在 _Address.cshtml 中

@Html.DisplayNameFor(modelItem => model.AdressLine)
@Html.EditorFor(modelItem => model.AdressLine)

在代码隐藏中,我的 Actions 包含两个简单的 ActionResults 方法:

[HttpGet]
public ActionResult Index()
{
Client = new Client();
Client.Name = "António Fonseca"
return View(model);
}

[HttpPost]
public ActionResult Index(Client model)
{
return View(model);
}

public ActionResult _Address(Address model)
{
return View(model);
}

当我提交表单时,我需要调用具有完整 Client 结构的 WebService 并显示结果消息。当点击 Index(model) -> model.Address 时会发生什么情况。它只会在遇到 _Address(model) 方法时返回。

有没有办法使用 PartialViews 绑定(bind) 主 Action 中的完整类结构

最佳答案

_Address.cshtml 中的模型更改为与主视图中的模型相同并使用 @Html.Action("_Address", model) 以便表单控件已正确命名 - 即 name="Address.AdressLine"(目前只是 name="AdressLine" 但您的模型不包含名为 的属性地址行).

@model Client
@Html.DisplayNameFor(m => m.Address.AdressLine)
@Html.EditorFor( m=> m.Address.AdressLine)

然而,使用 @Html.Action() 并不是正确的方法。您应该使用 EditorTemplate。将 _Address.cshtml 重命名为 Address.cshtml(以匹配您的类名)并将其放在 /Views/Shared/EditorTemplates 中文件夹,然后在 View 中使用

@Html.EditorFor(m => m.Address)

这将正确命名您的表单控件。

关于c# - POST 上 PartialViews 的绑定(bind)模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33303077/

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