2012-07-25 61 views
0

我有我在索引页上用来显示表单的局部视图。当从索引页面的下拉菜单中选择一个项目时,部分视图将加载相应的表单数据。我需要在提交时验证表单,但我不确定从控制器返回的内容会在显示错误时正确加载页面。我的提交按钮目前处于我的部分视图。 (我尝试将提交移动到索引页面,但它没有从表单返回任何内容。)如果存在验证错误,则会加载部分视图,但是索引视图中的下拉菜单不会。我已经看到了这个问题的一些解决方案,但没有人在这种情况下工作,可能是因为下拉。任何帮助是极大的赞赏。请让我知道如果HTML会有帮助,我有问题格式化这个职位。MVC3 ASP.NET在验证嵌套在局部视图中的表单时可以重新加载视图吗?

控制器:

public class PrinterSettingsController : Controller 
{ 
    public ActionResult Index() 
    { 
     ViewBag.Areas = db.Areas.ToList(); 
     PopulateDocumentTypeViewBag(); 
     return View(); 
    } 

    public ActionResult AreaDocumentSettingsList(int areaId = 0) 
    { 
     PopulateDocumentTypeViewBag(); 

     //get area, contains list of document settings 
     } 

     return PartialView("_AreaDocumentSettingsList", selectedArea); 
    } 

    [HttpPost] 
    public ActionResult AreaDocumentSettingsList(Area selectedArea) 
    { 

     if (IsPrinterValid(selectedArea.PrinterName) == false) 
     { 
      ModelState.AddModelError(string.Empty, "Incorrect printer path entered."); 
     } 

     if (ModelState.IsValid) 
     { 

      //do some stuff, save the new records to the database 

      db.Entry(originalAreaRecord).CurrentValues.SetValues(selectedArea); 
      db.SaveChanges(); 

      //if everything saves fine, go to a different page 
     return RedirectToAction("Index", "Workorder"); 

     } 
     //if there are errors -- this part needs to be changed -- show errors in partial view, but also display view it's nested inside of 

     return View("_AreaDocumentSettingsList", selectedArea); 

    } 
+0

所以你问的是如何获得索引刷新,当你提交局部视图(你的表单)? – cshemby 2012-07-25 18:43:38

+0

@cshemby是的,现在当页面加载验证错误时,索引页面上的任何内容都不会出现 – user1437804 2012-07-25 18:57:06

+0

请看本演练。它更复杂一点,你需要的,但应该足够解释如何传递部分观点。 http://geekswithblogs.net/blachniet/archive/2011/08/03/walkthrough-updating-partial-views-with-unobtrusive-ajax-in-mvc-3.aspx – cshemby 2012-07-27 18:54:42

回答

0

@ cshemby的联系是有益的:Updating Partial Views with Unobtrusive AJAX in MVC 3

但我的问题结束了,我是装我的部分观点为<div>标签通过一段JavaScript .changed事件。为了解决这个问题,我在分页视图的索引页面中添加了一个@Html.RenderPartial,并将下拉的值传回给我的控制器。这样我可以重新加载整个页面,包括验证。