以前关注过ASP.NET MVC, 但没有开发过具体项目。偶然的机会,接了一个开发类似Facebook网站功能的私活。突发奇想,何不试一试MVC呢?刚开始似乎还算顺利,但不久就发现不简单。最近一两天,翻来覆去鼓捣:Html.Partial、Html.RenderPartial、Html.RenderAction、Html.Action、ViewData、ViewBag、TempData。仍然不得要领。因此求教各路神仙指点迷津。我的问题是:一个页面包含多个Html.Partial(相当于ASP.NET 的User Control),每个Html.Partial都有自个的提交按钮(Submit Button)。我发现当点击某个子页面(Html.Partial)的按钮时,其他子页面(Html.Partial)的内容变成了Null Values。保存其他子页面的值可以使用Session来解决,但我觉得应该有更好的方法,请各位朋友赐教,谢谢。1. Controller and ViewModel
namespace Friends.Web.Models
{
    public class ParentViewModel
    {
        public Partial1ViewModel Partial1VM { get; set; }
        public Partial2ViewModel Partial2VM { get; set; }        public ParentViewModel()
        {
            Partial1VM = new Partial1ViewModel();
            Partial2VM = new Partial2ViewModel();
        }
    }    public class Partial1ViewModel
    {
        public List<Company> Companies { get; set; }        public Partial1ViewModel()
        {
            Companies = new List<Company>
            {
                new Company{ CompanyName = "Company1", IsInclude = false},
                new Company{ CompanyName = "Company2", IsInclude = false}
            };
        }
    }    public class Partial2ViewModel
    {
        public List<Product> Products { get; set; }        public Partial2ViewModel()
        {
            Products = new List<Product>
            {
                new Product{ ProductName = "Product1", IsInclude = false},
                new Product{ ProductName = "Product2", IsInclude = false}
            };
        }
    }    public class Company
    {
        public string CompanyName { get; set; }
        public bool IsInclude { get; set; }
    }    public class Product 
    {
        public string ProductName { get; set; }
        public bool IsInclude { get; set; }
    }
}namespace Friends.Web.Controllers
{
    public class PartialController : Controller
    {
        public ActionResult PartialParent()
        {
            return View(new ParentViewModel());
        }        [HttpPost]
        public ActionResult PartialParent(ParentViewModel vm, Partial1ViewModel vm1, Partial2ViewModel vm2)
        {
            return View(vm);
        }
    }
}
2. PartialParent.cshtml, SubPartial1.cshtml and SubPartial2.cshtml
@model Friends.Web.Models.ParentViewModel <div>
    @Html.Partial("SubPartial1", Model.Partial1VM)
</div><div>
    @Html.Partial("SubPartial2", Model.Partial2VM)
</div>
@model Friends.Web.Models.Partial1ViewModel  @using (Html.BeginForm())
 { 
    for (int i = 0; i < Model.Companies.Count(); i++)
    {
        <div>
            @Html.CheckBoxFor(m => m.Companies[i].IsInclude)&nbsp;
            @Html.DisplayFor(m => m.Companies[i].CompanyName)
        </div>
    }
    <input type="submit" value="Send selected items"/>
 }
@model Friends.Web.Models.Partial2ViewModel  @using (Html.BeginForm())
 { 
    for (int i = 0; i < Model.Products.Count(); i++)
    {
        <div>
            @Html.CheckBoxFor(m => m.Products[i].IsInclude)&nbsp;
            @Html.DisplayFor(m => m.Products[i].ProductName)
        </div>
    }
    <input type="submit" value="Send selected items"/>
 }