将数据从视图传递到控制器(我真的不知道它可能是啥)
Posted
技术标签:
【中文标题】将数据从视图传递到控制器(我真的不知道它可能是啥)【英文标题】:Pass data from View to Controller (I really don't know what it could be)将数据从视图传递到控制器(我真的不知道它可能是什么) 【发布时间】:2019-10-20 00:30:45 【问题描述】:我想使用 html.beginform 将数据从视图传递到控制器。 caregiverid 为空。这应该有效,但我不知道我做错了什么。我也检查了变量名,但都是一样的。
我还测试了 viewbag 是否充满数据。 viewbag 中填充了正确的数据。
这是风景
@using (Html.BeginForm("PairClient", "Admin", FormMethod.Post, new @class = "col-md-12", caregiverid = ViewBag.caregiverid ))
<select name="clientselect" class="selectpicker" data-live-search="true" data-actions-box="true" data-selected-text-format="count > 4" data-multiple-separator=" | " data-none-selected-text="Niks geselecteerd" data-deselect-all-text="Niks" data-select-all-text="Alles" data-count-selected-text="0 clienten geselecteerd" data- data-size="10" multiple>
@foreach (var client in Model)
<option style="font-size:15px;" value="@client.ClientId" selected="@(client.IsSelected ? "selected" : null)" data-tokens="@client.Email">@client.SocialNumber - @client.Firstname @client.Lastname</option>
</select>
<input class="btn btn-success " type="submit" value="Koppel cliënt" />
这是控制器
[HttpPost]
public IActionResult PairClient(string caregiverid, string[] clientselect)
string token = Request.Cookies["userToken"];
admin.PairClient(token, caregiverid, clientselect);
return RedirectToAction("Singlecaregiver");
成功了!我不知道我改变了什么......但不知何故它起作用了
【问题讨论】:
您的控制器需要接受一个视图模型,而不是 2 个单独的变量 这可能与此重复:***.com/questions/20333021/… How does a multiple select list work with model binding in ASP.NET MVC?的可能重复 我只想拥有caregiverId,这与选项值无关 @TheProgrammer 您应该将其添加到问题中。目前还不是很清楚。 【参考方案1】:尝试添加一个隐藏的 HTML 标记,例如。
<input type="hidden" name="caregiverid" id="caregiverid" value="@ViewBag.caregiverid"/>
在您的控制器中,您期望选择一个字符串数组,但选择字段中的数据是一个数组吗?
尝试在您的选择元素上设置“multiple”属性,或者将每个选择写入隐藏字段并发布,确保每个元素与方法签名具有相同的名称。例如。
<input type="hidden" name="clientselect"/>
也在你的控制器上更新它并尝试
public IActionResult PairClient([FromForm] string caregiverid, [FromForm] string[] clientselect)
【讨论】:
我只需要一个字符串中的 caregiverId。没有其他的 :)。不是整个数组或其他东西 我已经更新了我的帖子,只需添加名称为 caregiverid 和 @ViewBag.caregiverid 的隐藏输入标签 例如。 我做到了,但字符串仍然是空的,我想只制作一个护理模型并将其发送到视图;p,所以我发送整个模型而不是一个字符串跨度> 如果您检查元素,它的 value 属性中是否有数据?还更新将此添加到您的控制器 public IActionResult PairClient([FromForm] string caregiverid, [FromForm] string[] clientselect)【参考方案2】:您好,我尝试了您的代码并对其进行了一些修改,并设法将数据移至控制器,因此请复制粘贴以下代码,一切都会好起来的
HTML
@using WebApplication1.Models;
@model IReadOnlyCollection<Client>`@
ViewBag.Title = "Index";
<h2>Index</h2>`
@using (Html.BeginForm("Index", "Home", FormMethod.Post, new @class = "col-md-12" ))
<select name="clientselect" class="selectpicker" data-live-search="true" data-actions-box="true" data-selected-text-format="count > 4" data-multiple-separator=" | " data-none-selected-text="Niks geselecteerd" data-deselect-all-text="Niks" data-select-all-text="Alles" data-count-selected-text="0 clienten geselecteerd" data- data-size="10" multiple>
@foreach (var client in Model)
<option style="font-size:15px;" value="@client.ClientId" selected="@(client.IsSelected ? "selected" : null)"
data-tokens="@client.Email">@client.SocialNumber - @client.Firstname @client.Lastname</option>
</select>
<input type="hidden" name="caregiverid" id="caregiverid" value="@ViewBag.caregiverid" />
<input class="btn btn-success " type="submit" value="Koppel cliënt" />
这是我添加到项目中的控制器的图像,如您所见,caregiverid 设置为 1,并且已选择两个客户端。希望这能解决您的问题。
但我确实建议您将控制器中的代码更改为类似于 的代码
【讨论】:
感谢您的分析。我不知道我做了什么。但它奏效了:)【参考方案3】:尝试将<select name="clientselect[]" ...
(注意[]
)添加到您的select
标签中。
喜欢这里:https://support.aspnetzero.com/QA/Questions/8725/How-to-add-a-multi-select-drop-down-in-Modal
【讨论】:
以上是关于将数据从视图传递到控制器(我真的不知道它可能是啥)的主要内容,如果未能解决你的问题,请参考以下文章
如何将字符串列表从控制器传递到视图(或者我现在尝试这样做的方式可能不是这样)