我希望根据您所在的位置显示一堆消息,选项是"近"(值="近")和"远"(值="远")
我在我的 .cshtml 文件中为此制作了一个表单
<form id="form1" method="post" action="">
<div>
<label for="distance">Show people:</label>
<input type="radio" name="distance" value="Far" onclick="document.getElementById('form1').submit();"/> All
<input type="radio" name="distance" value="Close" onClick="document.getElementById('form1').submit();" /> Close by
</div>
</form>
然后我可以选择显示它,如下所示
@if form1.radio == "far" //sort of pseudo code :)
@foreach(var message in Model.Messages)
else
@foreach (var message in Model.Messages.Skip(Math.Max(0, Model.Messages.Count() - 12)))
{
do some stuff
}
别介意这段代码末尾的语法错误,我的问题是拾取"距离"的值。
在视图模型中编写了以下内容
public string Distance { get; set; }
并在控制器中操作结果
viewModel.Distance = distance;
但这似乎无效
提前谢谢你
您应该在视图中 ASP.net 使用 MVC 帮助程序和视图模型进行编译时检查,此外,这也是 asp MVC 的用途。
@model FooViewModel
@using (Html.BeginForm("Method", "Controller", FormMethod.Post, new { id = "form1" }))
{
@Html.LabelFor(x => Model.Distance)
@Html.RadioButtonFor(x => Model.Far)
@Html.RadioButtonFor(x => Model.Close)
<button type="submit">Submit</button>
}
[HttpPost]
public ActionResult Method(FooViewModel fooModel)
{
if (fooModel.Far){
ViewData["Messages"] = MyMessageListHere;
}
else if (fooModel.Close){
ViewData["Messages"] = MyMessageListHere;
}
return View();
}
然后在返回的视图中,只需执行以下操作:
@foreach (var message in (List<string>)ViewData["Messages"])
{
Html.DisplayFor(x => message);
}
未经测试的代码,但希望你明白了。您还应该将JS与html分开,onClick="..."
这不是一个好主意。在这里,您甚至不需要 Js。
感谢您的投入,马丁和斯蒂芬
一个熟练的人今天回来工作了,所以我现在知道我需要在控制器中写这个
viewModel.Distance = HttpContext.Request.Form["distance"];
然后我需要编写我在视图中编写的伪代码
@if (Model.Distance == "Far")
{
//adding the rest for you here
@foreach(var message in Model.Messages)
{
do some stuff
}
else
@foreach (var message in Model.Messages.Skip(Math.Max(0, Model.Messages.Count() - 12)))
{
do some stuff
}
}
我在视图模型中写的是正确的。希望这会帮助其他人。
一些评论:
Martin,在您的第一个代码部分中,您似乎混合了不同的代码区域,首先是视图,我还没有看到其他地方写的表单吗?然后模型,我还没有看到太多,但我还没有看到模型中的if子句?
我仍然感谢您为帮助我所做的努力!
斯蒂芬,可能是我会在 javascript 中再次执行此操作,因为它真的不应该重新加载页面,因为消息也会放在谷歌地图上,所以下一个挑战是使用 javascript 在地图上获取多个标记(它正在显示我当前位置的标记开始)
感谢您的投入!