2013-02-10 148 views
9

我是新的.NET MVC。提交后更新局部视图Ajax.Beginform

在视图 “DisplayThings” 我有这样的:

@foreach (var thing in Model) 
{ 
    @Html.Partial("DisplayPartial", thing) 
} 

在局部视图 “DisplayPartial” 我有

@using (Ajax.BeginForm("Afunc", new AjaxOptions())) 
{ 
    @Html.EditorFor(model => model.AstringThing) 
    @Html.EditorFor(model => model.AintThing) 

    <input type="submit" name="submit" value="Ajax Post" /> 
} 

目前的 “Afunc” 清议节省模式到数据库,然后重定向到控制器操作,从数据库中检索所有“事物”并呈现整个“Displaythings”视图。

我的问题是:当我按其中一个submitbuttons(每个“东西”我有一个submitbutton列表)。我只想要部分视图重新加载/反映我的变化。我不想重新加载整个“Displaythings”视图。我该怎么做呢?如果我只是返回一个局部视图,我会失去其他所有部分,除了那个局部视图

如果这是一个不好的方法,请给我指示。

更新:

我仍然在做一些错误的,因为我得到了一个新的页面渲染的局部视图。我的控制器:

public ActionResult Afunc(ThingModel thingmodel) 
{ 
    // do 

    return PartialView("DisplayPartial", thingmodel); 
} 

我一直在使用UpdateTargetId和的onSuccess都具有相同的结果(新页)

回答

12

在你的只是现在正在为new AjaxOptionsAjaxOptions尝试,你可以使用指定目标元素UpdateTargetId属性:

<div id="unique_thing_id"> 
@using (Ajax.BeginForm("Afunc", new AjaxOptions { UpdateTargetId = 'unique_thing_id' })) 
{  
} 
</div> 

以上,以每一个 “东西” 唯一ID的容器为代表,<div id="unique_thing_id">。这将被请求的repsonse取代。更改Afunc以仅呈现特定的“事物”部分。

+3

我会接受你的回答,因为你指出了我缺少的东西。然而,这只是我错过的两件事之一。一个常见的问题是忘记(在浏览网页后)将其添加到布局页面中: Andreas 2013-02-10 19:54:41

+0

@manojlds我开了一个新的问题,请你看看[这个](http://stackoverflow.com/questions/30868493/form-reload-but-partialview-cannot-with-ajax-in -mvc?noredirect = 1#comment49779357_30868493)问题? – 2015-06-16 14:26:15