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

时间:2016-03-17 14:02:26

标签: c# asp.net-mvc forms

我希望根据您的位置显示一堆消息,选项是“靠近”(值=“关闭”)和“远”(值=“远”)

我在.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;

但这似乎没有效果

提前谢谢

2 个答案:

答案 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进行映射(它正在显示我当前位置的标记开始)

感谢您的投入!