[英]How do i pass values through razor in mvc4
我在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的值传递回我的模型。 另外,我有一个文本框,可以在其中输入要传递回Model的任何值,有人可以用这种语法为我提供帮助吗?
谢谢
如果要进行此工作,则必须使用表格。 您可以选择标准形式或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,但是您可以在此找到很多信息。 我建议您观看这些视频!
假设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>
在body标签结束之前,我假设您正在使用jQuery
<script type="text/javascript">
$(document).ready(function(){
$("input[name=autoreload]").change(function(){
$(this).closest("form").submit();
});
});
</script>
我只是从这里写的,没有经过测试。
您将需要使用表单或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 */
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.