我花了很多天试图将信息从View传递给Controller
使用/{page-id}?fields=name,fan_count
我有一个textarea和一个复选框循环(我们不知道有多少)。 我可以管理textarea而不是复选框。
观点:
@Html.CheckBox()
我可以尝试使用" type = checkbox"
使用正常的html代码控制器:
@using (Html.BeginForm("ProviderConfigurationTool", "Admin"))
{
<div>
<strong>Custom Rule </strong>
@Html.TextArea("CustomRule", new { rows = 12, columns = 30 })
<br />
</div>
foreach (var item in ViewBag.farmlist)
{
<table>
<tr>
<td style="border-bottom: solid 1px #EBEFF6">
<p>@item</p>
@Html.CheckBox("@item");
<!-- <input id="@item" name="@item" type="checkbox" onclick="addingFarms('@item')" class="farms" /> -->
</td>
</tr>
</table>
}
<input type="submit" value="Submit and close" onclick="refreshParent();self.close()" />
}
@{Html.EndForm();}
另一个想法是使用javascript并尝试创建一个List以传递给控制器,就像那样
查看:
[HttpPost]
public ActionResult Create(string CustomRule, FormCollection collection)
{
string results = collection["Blanks"]; // it does not work
newRule.Key = CustomRule; // it works
}
input id="@item" name="@item" type="checkbox" onclick="getFarms('@item')" class="farms"
如果有人已经遇到这个问题或有想法,请帮助我!
答案 0 :(得分:2)
显然,HTML表单用于收集用户输入。对于复选框,value属性仅在提交表单时有意义。如果在提交表单时复选框处于选中状态,则复选框的名称将与value属性的值一起发送(如果未选中复选框,则不发送任何信息)。因此,如果为复选框指定名称,则Controller将接收和数组 按名称检查的值。因此,复选框的声明应该是这样的。
<input name="checkboxes" type="checkbox" value="@item" />
和您的控制器
public ActionResult Create(string customRule, string[] checkboxes)
{
...
}
checkboxes
包含所有已检查的值。
答案 1 :(得分:2)
你可以使用ajax。
在.cshtml
页面中:
<input type='checkbox' name='ch' value='@item'>
在JQuery中:
var it=$('ch:checked').serialize(); $.ajax('yourcontoroller/youractionname',it)
在您的控制器中:
public ActionResult Create(string customRule, string[] ch)
{
...
}