2013-07-15 60 views
0

我在使用剃刀時遇到困難,以及它如何將值傳回給我的控制器。我如何通過剃鬚刀在mvc4中傳遞數值

我有以下代碼

<div data-role="fieldcontain" class="inline-toggle"> 
     <label for="autoreload">Yes or No? <a href="#"><img class="smallInfo" src="/sites/dev-demo/mobile/assets/images/[email protected]"></a>:</label> 
     <select name="autoreload" class="togglehidden" id="autoreload" data-role="slider" data-hidden-id="#autohidden"> 
      <option [email protected](Model.IsTrue = false)>No</option> 
      <option [email protected](Model.IsTrue = true)>Yes</option> 
     </select> 
     <div id="autohidden" class="hide"> 
<input type="text" name="thevalue" id="value" value="@Model.TheValue" placeholder=""> 
     </div> 
    </div> 

正如你可以看到,這是一個切換,當I切換是的,我想的真值傳遞回來,如果它是沒有我想要的價值假回傳給我的模型。另外,我有一個文本框,可以輸入任何我想要返回給我的模型的值。是否有人能夠用這種語法來幫助我?

謝謝

+0

創建一個表單,也許使用一個強類型模型和ASP.NET(不是剃鬚刀)會自動填充您的模型與適當的值。 –

+0

我不認爲'Model.IsTrue = false'就是你想要的。這會將'Model.IsTrue'的值設置爲false而不是檢查值是什麼。另外,我不認爲你想在那裏有條件。如果您始終將值設置爲「true」或「false」,則會更容易,但是,您可能想要根據「Model.IsTrue」更改「checked」或「selected」的值。你也不需要佔位符,並用'display:none'隱藏它將導致它不被髮布。爲此嘗試使用隱藏字段。 –

回答

0

如果你想使這項工作,你將不得不使用表格。您可以選擇標準格式或AJAX格式,但爲了清晰起見,我將堅持採用標準格式。

是這樣的:

@using(html.BeginForm("MyAction", "SomeController")){ 
<div data-role="fieldcontain" class="inline-toggle"> 
     <label for="autoreload">Yes or No? <a href="#"><img class="smallInfo" src="/sites/dev-demo/mobile/assets/images/[email protected]"></a>:</label> 
     <select name="autoreload" class="togglehidden" id="autoreload" data-role="slider" data-hidden-id="#autohidden"> 
      <option [email protected](Model.IsTrue = false)>No</option> 
      <option [email protected](Model.IsTrue = true)>Yes</option> 
     </select> 
     <div id="autohidden" class="hide"> 
      <input type="text" name="thevalue" id="value" value="@Model.TheValue" placeholder=""> 
     </div> 
    </div> 
<input type="submit" value="Submit" /> 
} 

而在你的控制器

public class SomeController : Controller { 
[HttpPost] 
public ActionResult MyAction(FormCollection form){ 
    var toggle = form["autoreload"]; 
    var thevalue = form["value"]; 
} 
} 

或者你創建一個自定義類

public class MyModel { 
public bool AutoReload {get; set;} 
public string TheValue {get; set;} 
} 

並在您的視圖中使用它

@model MyModel 
    @using(html.BeginForm("MyAction", "SomeController")){ 
    <div data-role="fieldcontain" class="inline-toggle"> 
      <label for="autoreload">Yes or No? <a href="#"><img class="smallInfo" src="/sites/dev-demo/mobile/assets/images/[email protected]"></a>:</label> 
      // without razor syntax 
      <select name="autoreload" class="togglehidden" id="autoreload" data-role="slider" data-hidden-id="#autohidden"> 
       <option [email protected](Model.IsTrue = false)>No</option> 
       <option [email protected](Model.IsTrue = true)>Yes</option> 
      </select> 
      <div id="autohidden" class="hide"> 
       @Html.EditorFor(x => x.TheValue) // with razor syntax 
      </div> 
     </div> 
    <input type="submit" value="Submit" /> 
    } 

和結構的控制器,例如:

public class SomeController : Controller { 
[HttpPost] 
public ActionResult MyAction(MyModel model){ 
    var toggle = model.AutoReload; 
    var thevalue = model.TheValue; 
} 
} 

這是所有的C#/ ASP.NET MVC 4 101不過,你可以找到很多的信息,這一點。我建議查看these視頻!

+0

現在我實際上已經完成了所有這些工作,除了@using(html.BeginForm)和input type = submit line之外,還有一個按鈕,我單擊它將它發佈到控制器。我不確定我在做什麼以上的第二部分的答案.. – user2094139

+0

那麼,你有一個表格?您需要一個表單將數據發送到控制器。 –

+0

是不是選擇本身的形式? – user2094139

0

比方說AController

public class AController : Controller 
{ 
     public ActionResult YourView() 
     { 
     return View(); 
     } 
     [HttpPost] 
     public ActionResult YourView(boolean autoreload) 
     { 
     //autoreload 
     return View(); 
     } 
} 

查看

<div data-role="fieldcontain" class="inline-toggle"> 
     <label for="autoreload">Yes or No? <a href="#"><img class="smallInfo" src="/sites/dev-demo/mobile/assets/images/[email protected]"></a>:</label> 
     @using(Html.BeginForm("YourView","A",FormMethod.POST)){ 
     <select name="autoreload" class="togglehidden" id="autoreload" data-role="slider" data-hidden-id="#autohidden"> 
      <option [email protected](Model.IsTrue = false)>No</option> 
      <option [email protected](Model.IsTrue = true)>Yes</option> 
     </select> 
      } 
     <div id="autohidden" class="hide"> 
<input type="text" name="thevalue" id="value" value="@Model.TheValue" placeholder=""> 
     </div> 
    </div> 

body標籤結束之前,我假設你正在使用jQuery

<script type="text/javascript"> 
$(document).ready(function(){ 
$("input[name=autoreload]").change(function(){ 
    $(this).closest("form").submit(); 
}); 
}); 
</script> 

我剛從寫到這裏沒有測試。

0

您將需要使用窗體或ajax向服務器發送值。

HtmlHelpers通常產生類似以下的布爾變量

<input type="checkbox" value="true" name="autoReload" /> 
<input type="hidden" value="false" name="autoReload" /> 

在複選框沒有被選中,則默認爲false的情況。

public class MyModel 
{ 
    public bool AutoReload {get; set;} 
} 

.... 

public ActionResult DoSomething(MyModel model) 
{ 
    if (model.AutoReload) 
     /* do something */ 
}