2016-02-25 75 views
1

我将输入数据从.cshtml页面传递到操作方法。输入数据没有通过传递对象返回

这是我的.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(); 
} 

来自单选按钮的输入数据如日期和布尔值不通过包含这些变量的类的对象。 请帮我。

+1

请发布'passingdata'类代码。 –

回答

1

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

在这种情况下,你所有的名字都是“class”,这实际上意味着你有1个表单字段,其中有4个选项。

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

如果你不想使用助手,只记得当你提交表单时,发布的数据是基于每个表单字段的名称。 .Net在后台为您的序列化模型做了一些魔术,但实际上您只是以“?prop1 = val1 & prop2 = val2”的格式提交数据。

更新 我想,也许我要澄清一点更好,为什么你在做什么不工作,你如何期望。

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

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

希望能够澄清什么是错误的,并使您朝正确的方向发展。