2017-03-16 75 views
0

我嘗試驗證複選框的狀態,但我不確定我的語法是否正常? 鑑於我有這樣的:當我嘗試驗證它時,CheckBox不會更改值

@using (Html.BeginForm()) 
    { 

     <table> 
      @for (var i = 0; i < items.Count; i++) 
      { 
       var curItem = items[i]; 
       <tr> 
        <td> 
         @Html.CheckBox("chk" + i.ToString(), false) 
         @curItem.Text 
        </td> 
       </tr> 
      } 
     </table> 
    } 

     <a href="~/Welcome/GoNext" class="btn btn-success" role="button" style="width:130px; height:30px">Start</a> 

,並在我的控制器我有GoNext操作方法:

public ActionResult GoNext() 
{ 

    bool isOption0Checked = Request["chk0"] != null ? Request["chk0"].ToString() == "true" : false; 
    bool isOption1Checked = Request["chk1"] != null ? Request["chk1"].ToString() == "true" : false; 
    bool isOption2Checked = Request["chk2"] != null ? Request["chk2"].ToString() == "true" : false; 


    if (isOption0Checked && isOption1Checked && isOption2Checked) 
    { 
     return RedirectToAction("Index","Tab1"); 
    } 
    else 
    { 
     ModelState.AddModelError(String.Empty, "Message"); 

     return Index(); 

    } 

所以,當我檢查我的複選框不值從false更改爲true(它總是保持假的)?!我對此語法有疑問:

bool isOption0Checked = Request["chk0"] != null ? Request["chk0"].ToString() == "true" : false; 

這是正確的嗎?

+0

我想創建一個視圖模型視圖結合。然後將操作和控制器屬性添加到您的表單,以將值發回您的控制器。 – Wheels73

回答

0

是的,你是完全正確的!我沒有注意到該按鈕不在窗體中,而且方法是GET。當我做出這些改變時,我也懷疑上面的語法工作正常。但我覺得這樣最優雅的解決方案: 我定義了一個模型:

public class WelcomeModel { 
    public bool chk0 {get;set;} 
    public bool chk1 { get; set; } 
    public bool chk2 { get; set; } 

    } 

,現在我的GoNext動作看起來就像這樣:

[HttpPost] 
    public ActionResult GoNext() 
    { 
    WelcomeModel CheckState = new WelcomeModel(); 
    TryUpdateModel(CheckState); 
    if (CheckState.chk0 && CheckState.chk1 && CheckState.chk2 != false) 
    { 
    return RedirectToAction("Index", "Tab1"); 
    } 

    else 
    { 
    ModelState.AddModelError(String.Empty, "Message"); 

    return Index(); 

    } 
0

其實你有幾個問題:

  1. 您的按鈕(在你的情況下)爲形式的外部。
  2. 您的 按鈕發送'GET'請求(而不是'POST'),因此您的複選框的值不會被髮送到服務器。
  3. 您使用虛假的,不是因爲價值 回報false 檢查(請求[「chk0」]。的ToString()1 =「真」),但由於價值不 在所有(請求存在[ 「chk0」] == null)。

最簡單的辦法:修改您的形式宣告像@using (Html.BeginForm(("GoNext", "Welcome", FormMethod.Post))(如果我沒有在語法錯誤的)

你也可以把自定義按鈕表單內,以便如果你想有一個自定義提交按鈕。

希望這會有所幫助。

相關問題