将数据从视图传递到控制器(我真的不知道它可能是啥)

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】:

尝试将&lt;select name="clientselect[]" ...(注意[])添加到您的select 标签中。

喜欢这里:https://support.aspnetzero.com/QA/Questions/8725/How-to-add-a-multi-select-drop-down-in-Modal

【讨论】:

以上是关于将数据从视图传递到控制器(我真的不知道它可能是啥)的主要内容,如果未能解决你的问题,请参考以下文章

如何快速将数据从视图控制器传递到容器视图

如何将字符串列表从控制器传递到视图(或者我现在尝试这样做的方式可能不是这样)

从按钮将值传递给视图控制器字典

如何将 JSON 数据从登录视图传递到多个视图控制器,是不是可能?

将约束从视图传递到控制器 (MVC)

使用 Ajax 将数据从视图传递到控制器