gpt4 book ai didi

asp.net-mvc - 复合 View 模型和更新模型

转载 作者:行者123 更新时间:2023-12-04 06:28:56 25 4
gpt4 key购买 nike

在 POST 操作中未填充的值中缺少什么?

Controller

public ActionResult Index()
{
var productPageViewModel = new ProductPageViewModel();

productPageViewModel.ProductPageCriteria = BuildProductPageCriteriaViewModel();
productPageViewModel.Products = GetProducts(productPageViewModel.ProductPageCriteria);

return View(productPageViewModel);
}

[HttpPost]
public ActionResult Index(ProductPageViewModel productPageViewModel, FormCollection formCollection)
{
// productPageViewModel is not populated with posted values of ProductPageCriteria.CategoryID, ProductPageCriteria.DepartmentID and ProductPageCriteria.PageSize
// formCollection has correct values
// Calling UpdateModel(productPageViewModel); has no affect - makes sense, the framework has already called it
// Calling UpdateModel(productPageViewModel.ProductPageCriteria); populates the values.
// The renderd form has names like CategoryID, DepartmentID unlike ProductPageCriteria.CategoryID, ProductPageCriteria.DepartmentID
// if the top model was passed to all partial views also.

return View(productPageViewModel);
}

楷模
public class ProductPageCriteriaViewModel
{
public const int DefaultPageSize = 15;

public ProductPageCriteriaViewModel()
{
Categories = new List<Category>();
Departments = new List<Department>();

PageSize = DefaultPageSize;
}

[Display(Name = "Category")]
public int? CategoryID { get; set; }
[Display(Name = "Department")]
public int DepartmentID { get; set; }
[Display(Name = "Page Size")]
public int? PageSize { get; set; }

public List<Category> Categories { get; set; }
public List<Department> Departments { get; set; }
}

public class ProductPageViewModel
{
public ProductPageViewModel()
{
ProductPageCriteria = new ProductPageCriteriaViewModel();
Products = new List<Product>();
}

public ProductPageCriteriaViewModel ProductPageCriteria { get; set; }
public List<Product> Products { get; set; }
}

public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }

public Category Category { get; set; }
public Department Department { get; set; }
}

public class Category
{
public int CategoryID { get; set; }
public string CategoryName { get; set; }
}

public class Department
{
public int DepartmentID { get; set; }
public string DepartmentName { get; set; }
}

查看Index.cshtml
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)

@Html.Partial("_ProductCriteria", Model.ProductPageCriteria)

@Html.Partial("_ProductList", Model.Products)
}

部分 View _ProductCriteria.cshtml
@model Mvc3Application4.Models.ProductPageCriteriaViewModel

<fieldset>
<legend>Criteria</legend>

<div class="editor-label">
@Html.LabelFor(model => model.CategoryID)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.CategoryID, new SelectList(Model.Categories, "CategoryID", "CategoryName", Model.CategoryID), "--- All ---")
@Html.ValidationMessageFor(model => model.CategoryID)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.DepartmentID)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.DepartmentID, new SelectList(Model.Departments, "DepartmentID", "DepartmentName", Model.DepartmentID), "--- All ---")
@Html.ValidationMessageFor(model => model.DepartmentID)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.PageSize)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.PageSize, new SelectList(new List<int> {10, 15, 20, 25, 50, 100}.Select(n => new {Value = n, Text = n}), "Value", "Text", Model.PageSize), "--- All ---")
@Html.ValidationMessageFor(model => model.PageSize)
</div>

<p>
<input type="submit" value="Search" />
</p>
</fieldset>

部分 View _ProductList.cshtml
@model IEnumerable<Mvc3Application4.Models.Product>

<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th></th>
<th>
ProductName
</th>
</tr>

@foreach (var item in Model) {
<tr>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ProductID }) |
@Html.ActionLink("Details", "Details", new { id=item.ProductID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ProductID })
</td>
<td>
@item.ProductName
</td>
</tr>
}

</table>

最佳答案

这是我的头脑和未经测试的顶部,但我相信如果您将父模型( ProductPageViewModel )传递给产品标准局部 View ,更改局部 View 以继承此模型,并将控件更改为从 model => model.ProductPageCriteria.CategoryID 而不是 model => model.CategoryID ,它应该保持命名,以便 UpdateModel 可以将字段与发布的值匹配。

对不起,我的极端连续句子,如果这是不正确的,我相信我会很快获得我的同伴压力徽章。 :) 希望这可以帮助。

关于asp.net-mvc - 复合 View 模型和更新模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5680829/

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