2011-10-21 27 views
9

我想在asp.net MVC中傳遞一個字符串變量。我使用斷點,所以我發現它確實轉到了控制器中的正確方法,但發佈的變量等於空。在ASP.NET MVC中使用POST傳遞變量

我的標記:

@{ 
    ViewBag.Title = "TestForm"; 
} 

<h2>TestForm</h2> 

@using (Html.BeginForm()) { 
    <input type="text" id="testinput" /> 

    <input type="submit" value="TestForm" /> 
} 

我的控制器:

public ActionResult TestForm() 
{ 
    return View(); 
} 

[HttpPost] 
public ActionResult TestForm(string testinput) 
{ 
    Response.Write("[" + testinput + "]"); 

    return View(); 
} 

我把斷點第二TESTFORM方法內,testinput爲空.... 我缺少的東西?

注:我意識到大部分時間我都會使用模型來傳遞數據,但我想知道我也可以傳遞字符串。

作爲同一問題的一部分,我如何傳遞幾個變量?我的控制器中的方法是這樣的:

[HttpPost] 
public ActionResult TestForm(string var1, var2) 
{ 
} 

回答

18

對我來說,它看起來像你設置ID不是名稱。我每天都使用MVC3,所以我不重現你的樣本。 (我在20小時的節目中醒來,但仍然有動力去幫助)請告訴我,如果它不工作。但對我來說,它看起來像你必須設置「名稱」屬性...不是ID屬性。嘗試一下......如果它不起作用,我現在正在等待幫助你。

 <input type="text" id="testinput" name="testinput" /> 
+0

是的,它的工作hmmmm!爲什麼MS決定依靠一個名字而不是ID?爲什麼他們總是把它做倒退?但是,謝謝! – sarsnake

+6

不,微軟確實對mvc很滿意,不要考慮有關微軟的問題。它關於網絡標準。基本上,id屬性用於應用javascript(getElementsById,CSS-StyleSheets,jQuery等)。 name屬性與帖子和異步(數據驅動)相關。 – dknaack

+0

在常規的html表單中,我從來不需要指定name屬性,id始終是可用的,並且變量已成功發佈。 – sarsnake

1

在一個稍微不同的音符有什麼錯傳遞變量像你這樣的,但更有效的辦法是通過圍繞一個強類型的視圖模型讓您充分的MVC的善良的許多方面的優勢:

  • 強類型的意見
  • MVC模型綁定
  • HTML輔助

創建一個新的視圖模型:

public class TestModel 
{ 
    public string TestInput { get; set; } 
} 

您的測試控制器:

[HttpGet] 
    public ActionResult TestForm() 
    { 
     return View(); 
    } 

    [HttpPost] 
    public ActionResult TestForm(FormCollection collection) 
    { 
     var model = new TestModel(); 
     TryUpdateModel(model, collection); 

     Response.Write("[" + model.TestInput + "]"); 

     return View(); 
    } 

您的看法:

@model <yourproject>.Models.TestModel 

@{ 
    Layout = null; 
} 

<!DOCTYPE html> 

<html> 
<head> 
    <title>TestForm</title> 
</head> 
<body> 
    <div> 
     @using(Html.BeginForm()) 
     { 
      <div class="editor-label"> 
       @Html.LabelFor(m => m.TestInput) 
      </div> 
      <div class="editor-label"> 
       @Html.TextBoxFor(m => m.TestInput) 
      </div> 
      <input type="submit" value="Test Form"/> 
     } 
    </div> 
</body> 
</html> 
+1

如果您正在傳講強類型視圖,爲什麼要依靠POST操作方法中的formCollection。它不應該是公共的ActionResult TestForm(TestModel模型)? – Tommy

+0

我通過一個FormCollection這樣的單元測試的目的沒有嘲笑。我的測試可以將一個表單集合傳遞給UpdateModel調用,並將它映射到TestModel模型對象上。 – Jesse