簡體   English   中英

ASP.NET MVC 2.0-發布后ViewModel中的數據丟失

[英]ASP.NET MVC 2.0 - data in ViewModel lost after post

我有一個稱為ProductController的控制器。 控制器代碼如下:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Services.Abstract;
using Web.Models;
using Ninject;
using Services.Entities;

namespace Web.Controllers
{
    public class ProductController : Controller
    {

        IProductRepository productRepository;

        public ProductController(IProductRepository products)
        {
            productRepository = products;
        }


        [HttpGet]
        public ActionResult Create() {

            Product p = new Product {
                Id = 5
            };

            string theTitle = "The Title";

            var viewModel = new ProductViewModel {
                Product = p,
                TheTitle = theTitle
            };

            return View(viewModel);

        }

        [HttpPost]
        public ActionResult Create(ProductViewModel pvm) {

            if (ModelState.IsValid) {
                int result = productRepository.SaveProduct(pvm.Product);
                return Content(result.ToString());
            }
            else {
                return View(pvm);
            }

        }

    }
}

我正在使用ViewModel模式將各種信息發送到View。 例如,我發送的產品的默認ID設置為5,並且我還設置了title屬性[此外:這不是生產代碼-只是測試數據:-)]

到目前為止一切都很好。 第一次調用/ Product / Create時,我的Title屬性顯示在視圖上,並且Product ID默認為5。但是,當我發布表單時,僅保留Product信息。 如果ModelState無效,我將再次向用戶顯示視圖。 但是,這一次,標題不顯示(將其設置為null)。 產品確實按預期顯示。

如果可能,我想在ModelState無效時將原始標題發送回視圖。 沒有使用Session,ViewData和TempData的方法,有什么方法嗎?

問候,並提前感謝

如果我對您的理解正確,簡短的回答是“否”。

如果ProductViewModel.TheTitle屬性不是發布到Create POST方法的表單數據的一部分,則必須以某種方式重新創建它。 您正在設法在多個請求中保留此值的可能方式,但是我想問一問,最終是否真的有必要。

我認為,如果您在Create GET方法中檢索Title屬性的方式足以滿足那些請求,則同樣可以在POST請求中以相同的方式重新創建它。 POST通常會按原樣花費更多的資源和時間來處理(驗證,保存數據等),因此您將自己暴露於額外的依賴關系和漏洞中,可能會進行微不足道的優化。 就是說,我敢肯定,在很多情況下您采取的做法都是合理的。

在您的示例中,由於Title屬性不用於保存產品並且可以被有效地忽略,因此,如果您仍然希望在不重新創建產品的情況下將其保留在這些頁面上,則最簡單的方法可能是將其包含在隱藏的表單字段中,因此除產品外,您的模型活頁夾也可以將其拾取。 請注意,如果最終用戶操作了表單有效負載,則可以更改此值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM