2014-06-23 35 views
0

我有具有用於局部視圖的區域的頁面,是這樣的:根據通行證值至控制器

enter image description here

局部視圖改變在其上部分中的用戶是在通過一標籤菜單。對於每個選中的選項卡,局部視圖會更改。顯示的每個部分視圖都有可編輯的字段。包含在周圍視圖中的按鈕SaveCancel總是相同的。

當用戶按下Save,我要趕插入的值,我通過做其他的觀點:

HTML

<input type="text" name="phoneNumber"> 

C#

string phoneNumber = Request["phoneNumber"].ToString(); 

但是在這裏,當調試器遇到上述情況時,我一直收到一個空的異常C#行。

如何將部分視圖中的值傳遞給包含在input中的控制器?

EDIT

這是我的代碼:在所述視圖中的輸入(按鈕)

<input type="submit" name="save" value="Save" onclick="location.href='@Url.Action("SaveChanges", "Config")'"/> 

SaveChanges方法,在控制器中:

public ActionResult SaveChanges() 
     { 
      string phoneNumber = Request["phoneNumber"].ToString(); 
      ... 

另外 ,我已經試過這個我的登錄表單,它工作正常:

<form method="get" action="../Main/Index"> 
    <p> 
     <input type="text" name="username" maxlength="30"></p> 
    <p> 
     <input type="password" name="password" maxlength="25"></p> 

    <p class="submit"> 
     <input type="submit" name="commit" value="Login"></p> 
    </form> 

而且控制器(MainController)

public ActionResult Index() 
     { 
      getCredentials(); 
... 

public void getCredentials() 
     { 

      if (Request["username"] != null && Request["password"] != null) 
... 
return View(); 
+0

目前尚不清楚問題是什麼。表單發佈到什麼控制器動作?該帖子中是否包含「輸入」值? (另外,爲什麼使用'Request []'而不是動作方法參數?這會將代碼緊密地耦合到活動的HTTP實例。)該值不會「從部分視圖切換到控制器。」它通過HTTP請求從呈現的HTML表單到控制器。最初呈現客戶端標記的視圖在那時不再相關。 – David

+0

你爲什麼不使用模型綁定? –

+0

我不知道,但因爲我設法通過'Request'將視圖的值傳遞給控制器​​,所以我將採用相同的方法。我是新手,剛剛學習 – chiapa

回答

2

你實際上並沒有在你的提交中發佈任何值。看一下這個代碼是這樣做的:

onclick="location.href='@Url.Action("SaveChanges", "Config")'" 

當你點擊按鈕,你只要告訴瀏覽器去的URL SaveChanges行動。這是調用GET請求並放棄任何輸入到客戶端的表單數據。

您應該發佈表單來代替。通常,這將涉及包裝的元素,並在form標籤的提交按鈕(@Html.BeginForm輔助方法,可以與幫助),這樣客戶端,它看起來像:

<form method="POST" action="/some/url"> 
    <input type="text" name="phoneNumber" /> 
    <!-- other HTML elements --> 
    <input type="submit" /> 
</form> 

不要忽略的作用提交按鈕,除非你仍然以某種方式提交值。否則,你只是放棄/忽略這些表單值。

如果您的頁面是一個大表單,請將標籤包裝在單個form元素中。如果你想每個局部視圖爲自己獨立的形式,然後把Html.BeginForm調用只是在局部視圖

@using (Html.BeginForm("SaveChanges", "Config")) 
{ 
    // put your partials here 

    // put your buttons here 
} 

:這可以通過包裝所有的諧音來完成。但是,單個全局提交按鈕可能會有點棘手。通常在具有多種形式的設置中,每個人都有自己的按鈕。您可以在選項卡更改時顯示/隱藏不同的提交按鈕,這取決於您使用什麼來管理選項卡。

+0

看看我的編輯:我已經做了我的登錄表單,它工作正常。你說我實際上沒有發佈信息,但它在其他地方工作,所以它也應該在這裏工作。我只是使用我之前取得的成果,嘗試將其應用到這種新情況 – chiapa

+0

@chiapa:您的登錄表單可以工作,因爲它不會使用自定義的'onclick'處理程序覆蓋表單文章。這是一種正常的形式,所以它可以正常工作。你沒有使用你以前使用過的東西,你正在做一些完全不同的事情。 – David

+0

是的,這是不一樣的,你是對的。但刪除'onclick'處理程序並沒有幫助 – chiapa

1

您可以爲每個部分包含所有這些視圖模型,然後視圖模型,在這種情況下,您會收到的信息當您提交接收父視圖模型的表單時,所有選項卡都會顯示。 這樣的東西:

public class ParentViewModel{ 

    public int Id { get; set; } 
    public Option1ViewModel Option1 { get; set; } 
    public Option2ViewModel Option2 { get; set; } 
    public Option3ViewModel Option3 { get; set; } 
    public Option4ViewModel Option4 { get; set; } 


} 
+1

感謝您的回答。我想這是一個方向,但我仍然在學習,現在這個概念似乎有些複雜。 1 + – chiapa