C# 如何在mvc4中通过razor传递值

C# 如何在mvc4中通过razor传递值,c#,html,asp.net-mvc,razor,C#,Html,Asp.net Mvc,Razor,我在使用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">

我在使用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的值传递回我的模型。另外,我有一个文本框,我可以在其中输入任何我想传递回我的模型的值。有人能帮我使用这个语法吗


谢谢

如果你想让它生效,你必须使用一个表单。您可以在标准表单或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 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" />
    }
这都是C#/ASP.NETMVC4101,但是,你可以找到很多关于这方面的信息。我建议你看看视频

比方说一个控制者

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


是还是不是
@使用(Html.BeginForm(“YourView”、“A”、FormMethod.POST)){
不
对
}
在body标记末尾之前,我假设您使用的是jQuery

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

$(文档).ready(函数(){
$(“输入[name=autoreload]”)。更改(函数(){
$(this).最近的(“表单”).submit();
});
});

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

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

HTMLHelper通常为bools生成如下内容

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

创建一个表单,也许使用一个强类型模型,ASP.NET(不是razor)会自动用适当的值填充您的模型。我不认为
model.IsTrue=false
是您想要的。这将把
Model.IsTrue
的值设置为false,而不是检查值是什么。还有,我认为你不需要有条件的。如果总是将值设置为
true
false
,则会更容易,但是,您可能需要根据
模型更改
选中的
选中的
的值。IsTrue
。您也不需要占位符,使用
display:none
隐藏占位符将导致无法发布占位符。尝试使用hiddenfield实现此目的。现在,除了@using(html.BeginForm)和input type=submit行之外,我实际拥有了所有这些内容,因为我单击了一个按钮将其发布到控制器。我不确定我在上面做的与你答案的第二部分有什么不同……嗯,你有表格吗?您需要一个表单来向控制器发送数据。select本身不是表单吗?不是,它是表单元素。检查生成的HTML代码:您会注意到并没有任何东西可以将元素连接到动作。
<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>
<script type="text/javascript">
$(document).ready(function(){
$("input[name=autoreload]").change(function(){
     $(this).closest("form").submit();
});
});
</script>
<input type="checkbox" value="true" name="autoReload" />
<input type="hidden" value="false" name="autoReload" />
public class MyModel
{
    public bool AutoReload {get; set;}
}

....

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