2013-09-26 64 views
0

Ajax表单确实更新了选定的div,但不是只是重新加载该div中的局部视图,而是将整个页面内容插入到该div中。MVC使用Ajax.BeginForm更新局部视图

.cshtml文件

<fieldset> 
    <legend>File(s)</legend>    
    <div id="filesBody"> 
     @Html.Action("Action", "Controller", new {id=Model.Id}) 
    </div> 
    <br /> 

    @using (Ajax.BeginForm("UploadFile", "Controller", null, new AjaxOptions {  UpdateTargetId="filesBody"}, new { enctype = "multipart/form-data", @id = "myForm" })) 
    { 
     @Html.HiddenFor(model => model.ComplaintId) 
     <div> 
      <label for="File">Add File:</label> 
      <input type="file" name="FileAttachment" /> 
      &nbsp;<input type="submit" value="Upload" /> 
      @Html.ValidationMessage("FileAttachment") 
     </div> 
    } 
</fieldset> 

控制器

public PartialViewResult GetFilesData(long? Id) 
{ 
    Model Model = new Model(Id); 
    TryUpdateModel(Model); 
    return PartialView(Model); 
} 

局部视图

@model Models 
<div id="reloadField"> 
    @foreach (var ph in Model.docs) 
    { 
     ///code 
    } 
</div> 
+0

您的'Ajax.BeginForm'不应该针对'GetFilesData'操作吗? – asymptoticFault

+0

谢谢!成功了! –

回答

3

在您的局部视图设定的布局等于空。

@model Models 
@{ 
    Layout = null; 
} 

UPDATE

更改Ajax.BeginForm调用GetFilesData行动。

+0

仍将整个页面插入该区域 –

+0

@ user2094494更新了我的答案。 – asymptoticFault

+0

我不知道问题是否仍然存在,但应该在web.config中启用不引人注意的JavaScript,并且应该在页面上引用jquery.unobtrusive-ajax.js。 –