我希望根据您的位置显示一堆消息,选项是“靠近”(值=“关闭”)和“远”(值=“远”)
我在.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
}
在这段代码的最后,别担心语法错误,我的问题是拿起“距离”的值。
在viewmodel中编写了以下内容
public string Distance { get; set; }
并且在actionresult的控制器中
viewModel.Distance = distance;
但这似乎没有效果
提前谢谢
答案 0 :(得分:0)
您应该在视图中使用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);
}
未经测试的代码,但希望你能得到这个想法。你也应该从html中分离你的JS,onClick="..."
并不是一个好主意。在这里你甚至不需要Js。
答案 1 :(得分:0)
感谢您的意见,Martin和Stephen
今天有一位技术人员回来工作,所以我现在知道我需要在控制器中写这个
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
}
}
我在viewmodel中写的内容是正确的。希望这会有助于其他人。
一些意见:
Martin,在您的第一个代码部分,您似乎混合了不同的代码区域,首先是视图,我还没有看到其他地方编写的表单?然后是模型,我还没有看到太多,但我还没有看到模型中的if-clauses?
我仍然感谢你帮助我的努力!
斯蒂芬,可能是我会在javascript中再次这样做,因为它真的不应该重新加载页面,因为消息也将被放在谷歌地图上,所以接下来的挑战是获得多个标记使用javascript进行映射(它正在显示我当前位置的标记开始)感谢您的投入!