2011-03-30 59 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僅是內容的作品以類似的方式在這個意義下,元素將得到更新,而不是目標實際上會被整個響應對象所取代。

感謝您的幫助,我不僅得到它的工作,但我現在明白它應該如何工作。