0

我在使用 Razor 以及它如何将值传递回我的控制器时遇到了困难。

我有以下代码

    <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/info@2x.png"></a>:</label>
        <select name="autoreload" class="togglehidden" id="autoreload" data-role="slider" data-hidden-id="#autohidden">
            <option value=@(Model.IsTrue = false)>No</option>
            <option value=@(Model.IsTrue = true)>Yes</option>
        </select>
        <div id="autohidden" class="hide">
<input type="text" name="thevalue" id="value" value="@Model.TheValue" placeholder="">
        </div>
    </div>

如您所见,这是一个切换,当我切换是时,我希望将 true 的值传回,如果不是,我希望将 false 的值传回我的模型。此外,我有一个文本框,我可以在其中输入任何我想回传给我的模型的值。有人能帮我解决这个语法吗?

谢谢

4

3 回答 3

0

您将需要使用表单或 ajax 将值发送到服务器。

HtmlHelpers 通常会为 bools 生成如下内容

<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 */
}
于 2013-07-15T23:56:56.660 回答
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/info@2x.png"></a>:</label>
        <select name="autoreload" class="togglehidden" id="autoreload" data-role="slider" data-hidden-id="#autohidden">
            <option value=@(Model.IsTrue = false)>No</option>
            <option value=@(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/info@2x.png"></a>:</label>
            // without razor syntax
            <select name="autoreload" class="togglehidden" id="autoreload" data-role="slider" data-hidden-id="#autohidden">
                <option value=@(Model.IsTrue = false)>No</option>
                <option value=@(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,但您可以找到很多关于此的信息。我建议查看这些视频!

于 2013-07-15T20:38:48.733 回答
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/info@2x.png"></a>:</label>
       @using(Html.BeginForm("YourView","A",FormMethod.POST)){
        <select name="autoreload" class="togglehidden" id="autoreload" data-role="slider" data-hidden-id="#autohidden">
            <option value=@(Model.IsTrue = false)>No</option>
            <option value=@(Model.IsTrue = true)>Yes</option>
        </select>
           }
        <div id="autohidden" class="hide">
<input type="text" name="thevalue" id="value" value="@Model.TheValue" placeholder="">
        </div>
    </div>

在正文标签结束之前,我假设您使用的是 jQuery

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

我刚刚从这里写过,没有经过测试。

于 2013-07-15T20:40:34.163 回答