在 C# MVC 中使用 if 子句的表单值



我希望根据您所在的位置显示一堆消息,选项是"近"(值="近")和"远"(值="远")

我在我的 .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 在地图上获取多个标记(它正在显示我当前位置的标记开始)

感谢您的投入!