C# 如何在mvc4中通过razor传递值
我在使用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">
<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 */
}