2012-11-21 85 views
0


我在使用MVC3時遇到了一些麻煩。 我有一個強類型局部視圖包含一個窗體。它嵌入在一個大頁面中。我想將這個局部視圖提交給控制器並更新一些字段。更新後,我期望嵌入在頁面中的局部視圖被替換爲包含新值的HTML,因爲UpdateTargetId被聲明,但事實並非如此。不知道我能否實現這一點。任何幫助將不勝感激。
代碼爲:MVC3 ajax在強類型局部視圖中更新字段

public ActionResult Employee(Employee em) 
{ 
    var em1 = new Employee 
    { 
     Id = 1, 
     Name = "xing yanguang", 
     Code = "131324e12" 
    }; 

    return PartialView(em); 
} 

在局部視圖中的代碼:

employee partial view

+0

可能的重複[爲什麼我在我的模型中更新MVC3控制器中的值不在客戶端上呈現?](http://stackoverflow.com/questions/5675213/why-is-a-value-that -i-update-in-my-model-inside-an-mvc3-controller-not-rendered) – tpeczek

+0

請檢查我提供的重複鏈接 - 這是ModelState的問題(部分視圖忽略了你的新模型,來自ModelState的值) – tpeczek

+0

是的,確實重複了。它的作品謝謝。 –

回答

0

嘗試此 修改局部視圖

//In Partial View 

@model MvcApplication1.Employee 

    <table> 
     <tr> 
      <td> 
       @Html.TextBoxFor(m => m.Id) 
      </td> 
      <td> 
       @Html.TextBoxFor(m => m.Name) 
      </td> 
      <td> 
       @Html.TextBoxFor(m => m.Code) 
      </td> 
     </tr> 
    </table> 

Now in your parent view 



// In View.cshtml 
    <div id="div_employee"> 
     @Partail("partailView",Model) 
    </div> 
     @using (Ajax.BeginForm("Employee", "PO", new AjaxOptions { HttpMethod = "GET", UpdateTargetId = "div_employee", InsertionMode = InsertionMode.Replace })) 
     { 
      <input type="submit" value="save" /> 
     } 

在控制器

public string Employee(Employee em) 
{ 
    var em1 = new Employee 
    { 
     Id = 1, 
     Name = "xing yanguang", 
     Code = "131324e12" 
    }; 

    return RenderPartialViewToString("partailView",em1); 
} 


protected string RenderPartialViewToString(string viewName, object model) 
     { 
      if (string.IsNullOrEmpty(viewName)) 
       viewName = ControllerContext.RouteData.GetRequiredString("action"); 

      ViewData.Model = model; 

      using (StringWriter sw = new StringWriter()) 
      { 
       ViewEngineResult viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName); 
       ViewContext viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw); 
       viewResult.View.Render(viewContext, sw); 
       return sw.GetStringBuilder().ToString(); 
      } 
     } 

在控制器增加一個方法來得到局部視圖的RenderHtml,通過使PartailViewName模型到RenderPartialViewToString方法將與更新後的值返回的視圖Htmlstring。