输入数据不是通过传递对象返回的

时间:2016-02-25 18:44:52

标签: c# asp.net-mvc visual-studio

我将输入数据从.cshtml页面传递给action方法。

这是我的.cshtml页面:

@model passingdata

<form asp-controller="Home"  method="post" asp-action="About" >
   <button class="btn-danger" type="submit" value="Submit"></button>
   <div class="form-group">
      <label>
        <input asp-for="date" placeholder="Date" class="col-md-8" />
      </label>
      <label>
        Select from these Four Classes
        <input type="radio" name="class" asp-for="classselect1" id="classselect1" value="classselect1" class="col-md-4" /> <p> @Model.classname1</p>
        <input type="radio" name="class" asp-for="classselect2" id="classselect2" value="classselect2" class="col-md-4" /> <p> @Model.classname2</p>
        <input type="radio" name="class" asp-for="classselect3" id="classselect3" value="classselect3" class="col-md-4" /> <p> @Model.classname3</p>
        <input type="radio" name="class" asp-for="classselect4" id="classselect4" value="classselect4" class="col-md-4" /> <p> @Model.classname4</p>
      </label>
  </div>
</form> 

这是我的控制器代码,当我点击按钮时调用。

[HttpPost]
public IActionResult About(passingdata p)
{
    ViewData["Message"] = "Your application description page.";
    Teacher.classselect1 = p.classselect1;
    Teacher.classselect2 = p.classselect2;
    Teacher.classselect3 = p.classselect3;
    Teacher.classselect4 = p.classselect4;
    Teacher.date = p.date;
    return View();
}

来自radiobutton的输入数据(如date和bool值)不会通过包含这些变量的类的对象。 请帮助我。

1 个答案:

答案 0 :(得分:1)

如果我没记错的话,每个单选按钮的名称属性是.net MVC将如何将值映射到模型。

在这种情况下,您的所有名称都是“类”,这实际上意味着您有一个名为class的表单字段,其中包含4个选项。

我建议使用html帮助程序类,因为它们会自动为您创建正确的html。这篇文章的答案应该有所帮助:When using .net MVC RadioButtonFor(), how do you group so only one selection can be made?

如果您不想使用帮助程序,请记住在提交表单时,发布的数据基于每个表单字段的名称。 .Net在后台做了一些神奇的事情来为你序列化你的模型,但基本上你只是以“?prop1 = val1&amp; prop2 = val2”格式提交数据。

<强>更新 我想也许我应该更清楚地说明为什么你所做的事情并没有按照你的期望工作。

当您通过表单发布或放置数据时,它会将输入字段(文本框,单选按钮,复选框等等)作为查询字符串参数传递或者是正文的一部分。单选按钮的工作方式与其他输入类型略有不同。对于单选按钮,有多个输入元素,但只有一个是有效的。这是通过使用name属性来处理的。在你的情况下,所有的名称都是“类”,这意味着传递给服务器的唯一东西是单个“?class = {val}”(val是选择了单选按钮的值)。 / p>

如果您的传递数据模型有一个名为“class”的属性,它将被填充。如果您的目标是使用不同的值填充所有4个classselect属性,则需要每个单选按钮的名称不同。但如果每个名称只有一个单选按钮,则每个属性只能有1个值。您需要多个具有相同名称的RadioButton才能拥有多个值(每个属性只能选择其中一个)。

希望能澄清错误并让你朝着正确的方向前进。