2012-03-16 80 views
2

我新的MVC 3,我有以下幾點看法:相同的字段名稱不正確的渲染

指數:

@using (Html.BeginForm()) 
{ 
    @Html.Hidden("id", "1") 
    <input type="submit" value="Submit" /> 
} 

主營:

@using (Html.BeginForm()) 
{ 
    @Html.Hidden("id", "2") 
    <input type="submit" value="Save" /> 
} 

而跟隨控制器:

public ActionResult Index() 
{ 
    ViewBag.Message = "Welcome!"; 
    return View(); 
} 
[HttpPost] 
public ActionResult Index(string id) 
{ 
    if ("1".Equals(id)) 
    { 
     return View("Main"); 
    } 
    else("2".Equals(id)) 
    { 
     return View(); 
    } 
} 

我的期望主要的觀點是將隱藏的輸入值設爲「2」。但是,到達主頁面並檢查源代碼後,該值仍被設置爲「1」。任何想法我在這裏做錯了嗎?

回答

1

這取決於您使用的URL。如果你輸入的是..../Index,那麼它會進入索引視圖,但是如果你要去.../Index/1那麼它會進入主視圖並渲染你的兩個(這很奇怪,因爲1會變成2 :))

此外,您只會在POST上點擊Index(string id)方法,因此也可能是您的問題。一個典型的URL請求遇到作爲一個GET

如果沒有幫助,那麼你可能需要提供更多的細節(什麼網址,你正在嘗試打,你如何試圖讓那裏)

在嘗試這個自我後更新

我明白你在說什麼。隱藏字段設置爲1的原因是ModelState爲您插入。據我所知,這是不應該發生的,因爲你明確地設置了這個值。但是,看起來如果有一個匹配的狀態項目,它將使用它。您可以通過將id更改爲Main的隱藏輸入名稱中的其他任何內容來測試。

Here is the documentation。在備註中,它確實聲明這對於模型綁定來說意味着更多,但我會認爲插入的值會覆蓋其他任何東西。

最後更新

原來,這其實已經長大到合適的人,它是由設計。儘管如此,他們應該修改文檔以使其更加明確。 Here is the SO question that answers this

+0

我第一次嘗試導航到'.../Index'。在索引上提交表單後,它應該向控制器的「索引(字符串id)」方法發佈「POST」並返回它當前所做的主視圖。但是,問題在於主視圖的源代碼仍然將隱藏的輸入字段值設置爲「1」。我需要能夠在不改變URL的情況下瀏覽本網站的頁面。這有幫助嗎? – holic87 2012-03-16 16:07:53

+0

有趣的是,我自己試了一下之後更新了我的答案。如果你問我,這是一個錯誤......但我現在很好奇,並正在做一些研究:) – 2012-03-16 16:26:14

+0

重新編輯與我發現是推理。 +1對你的問題的一個「noob」遇到這樣一個有趣的問題:) – 2012-03-16 16:33:22

0

不要忘記路由引擎默認設置爲將第三段視爲ID。如果我沒有弄錯的路由參數將戰勝形式參數,以便:

案例1:

URL: controller/index/ 
HIDDEN_ID: 1 
= Action id parameter = 1 //from the hidden field 

案例2:

URL: controller/index/2 
HIDDEN_ID: 1 
= action id parameter = 2 //from the url route not te hidden field 
+0

感謝您的信息。我明白你在說什麼,但在我的情況下,主視圖上隱藏的表單ID值甚至在頁面呈現時都沒有設置爲正確的值。我期待'@ Html.Hidden(「id」,「2」)'行生成'on主要的,但是值是「1」。思考? – holic87 2012-03-16 16:20:14

+0

回來跟賈斯汀說了同樣的話 - 在他的文章中加入了一些額外的思想。 – 2012-03-16 16:49:53