2011-03-30 151 views
0

我有,有一个DropDownListFor和Ajax.BeginForm帮手内按钮一个非常简单的看法。点击这个按钮可以在我已经设置更新的div内再次渲染整个视图,包括布局页面(当我多次点击按钮时,我还注意到cpu的峰值)MVC3 Ajax.BeginForm古怪行为

这里是view中的Ajax.BeginForm:

@using (Ajax.BeginForm("About2", "Home", new AjaxOptions { UpdateTargetId = "property22" })) 
{ 
    <div> 
     <div id="property22"> 
      @Html.DropDownListFor(m => m.SomePropertyToBind, new SelectList(Model.list, "property1", "property2")) 
     </div> 
     <button type="submit" id="test"> 
      Click me</button> 
    </div> 
} 

任何想法,我哪里会出错?

我上传的,如果有人有一个几分钟的时间来看看它的整个项目: http://www.sendspace.com/file/siu3r31(免费提供商所以有可能是一个弹出式)

感谢

回答

-1

我怀疑是发生了什么事是你在Ajax响应中返回完整的View(包括布局模板)。尝试暂时改变你的“家”控制器“为约2”行动于以下内容:

public ContentResult About2() { 
    return Content("Hello World"); 
} 

我测试了你的剃须刀标记这个样本行动,点击按钮正确的更换你的下拉列表中的“Hello World!”。

如果这确实发生了什么,那么你会希望通过声明那您传回视图顶部以下返回从“为约2”视图没有布局。

@{ 
    Layout = null; 
} 
1

您正在使用Ajax.BeginForm帮助程序的错误超载。它应该是这样的:

@using (Ajax.BeginForm(
    "About2", 
    "Home", 
    null, 
    new AjaxOptions { UpdateTargetId = "property22" }, 
    new { @id = "refreshe" } 
)) 

注意附加空值,我传递的routeValues参数。另外,在例子中,你上传你忘了包括TestView.cshtml视图。这是为了解决这个问题是说你有两种可能性:

要么返回一个局部视图:

public ActionResult About2() 
{ 
    Random randomizer = new Random(); 
    int random = randomizer.Next(1, 1000000000); 
    ModelTest newModelTest = new ModelTest(); 
    string[] stringList = new string[] { "Red", "Blue", "Green" }; 
    newModelTest.list = from test in stringList 
         select new ModelTestList 
         { 
          property1 = test, 
          property2 = test 
         }; 
    newModelTest.SomePropertyToBind = stringList[random % 2]; 
    return PartialView("TestView", newModelTest); 
} 

或禁用TestView.cshtml视图的布局:从

@{ 
    Layout = null; 
} 
+0

谢谢,这也帮助:) – user683302 2011-03-30 07:13:14

0

不幸的是你的上面的解释和代码解释,我不确定你想要达到什么。不过,我认为你最担心的是让Ajax在你的视野中工作。

在你为约2的操作方法,你试图返回它是TestView完整视图(在这种情况下,它不存在),并将其传递newModelTest视图模型。我建议改变返回PartialView或JsonResult。

例如,改变为约2操作方法的return语句

public ActionResult About2() 
    { 
     ... 
     return Json(newModelTest); 
    } 

或将其更改为返回类型为字符串,返回“的TestResult”

public String About2() 
    { 
     ... 
     return "TestResult"; 
    } 

,或者你可以改变返回声明返回部分视图

0

感谢您的回复。

我刚刚意识到About2应该返回“关于”视图,而不是“TestView”。我曾尝试用Ajax.BeginForm代码创建一个局部视图,但我遇到了同样的问题。

这是我Ajax.BeginForm(到目前为止我一直使用jQuery的)第一次尝试,我的印象是,它是通过指定目标ID仅是内容的作品以类似的方式在这个意义下,元素将得到更新,而不是目标实际上会被整个响应对象所取代。

感谢您的帮助,我不仅得到它的工作,但我现在明白它应该如何工作。