【问题标题】:ASP .NET Core MVC - Post List data from HTML select control into MVC ControllerASP .NET Core MVC - 将列表数据从 HTML 选择控件发布到 MVC 控制器
【发布时间】:2017-11-10 14:47:42
【问题描述】:

我正在为我的网站制作一个表单,用户可以在该表单中输入他们的帐户名称,然后提交帐户名称列表。

下面是我在表单中的 HTML(请忽略任何臭代码,我会对其进行排序)。

<div class="form-group">
        <label asp-for="Accounts" class="control-label site-font">Accounts<b style="color: red">*</b></label>
        <select id="account-list" name="accounts[]" multiple="multiple" class="form-control" asp-for="Accounts"></select>
        <div style="margin-top: 1%"></div>

        <input type="text" id="account-name" placeholder="Enter your Account Name" class="form-control" asp-for="Accounts" />
        <div style="margin-top: 1%"></div>
        <select id="platform-list" class="form-control">
            <option>Xbox</option>
            <option>PS4</option>
            <option>PC</option>
        </select>
        <div style="margin-top: 1%"></div>
        <select id="software-list" class="form-control">
            <option>Microsoft Account</option>
            <option>Playstation Network</option>
            <option>Uplay</option>
            <option>Steam</option>
            <option>Discord</option>
            <option>None of the above</option>
        </select>
        <div style="margin-top: 1%"></div>
        <input type="checkbox" id="main-account"/> Main Account
        <div style="margin-top: 1%"></div>
        <input type="button" class="submit-button" value="Add Account" id="add" />
        <span id="account-error" asp-validation-for="Accounts" class="text-danger"></span>
    </div>

我的问题是,每当我单击提交时,我都会收到无效的演员表异常。

我的 Controller 采用一种 Member 类型,其 Accounts 属性是一个字符串列表。

以下是用户在添加了几个帐户后将看到的内容,每一行都是列表中的一个项目。

我已使用 JavaScript 来实现此功能,但我认为这不会对问题产生任何影响,因此我没有将其包含在问题中,但如果您想查看它,请告诉我。

如果我遗漏了什么,或者问题不清楚,请告诉我,我会尽快回复。

【问题讨论】:

  • 我只是快速扫描了这个,如果我错了,请纠正我,但这似乎是我想将数据从控制器发送到视图然后发送回来?相反,我实际上是在视图中创建列表并将其发送到控制器。
  • 首先显示您的模型和生成视图的 GET 方法。您生成的视图可能无法正确绑定。

标签: javascript c# html asp.net asp.net-mvc


【解决方案1】:

您收到错误的原因是因为表单发布的内容如下:

"accounts[]" = "SelectedOption1"

"accounts[]" = "SelectedOption2"

"accounts[]" = "SelectedOption3"

....

我认为解决此问题的最简单方法是将“帐户”属性设为字符串数组/列表。如果您无法做到这一点,您可以使用 JS 将选定的值存储在逗号分隔的字符串中,并将该字段发布到 accounts 属性而不是控件:

 <select id="account-list" multiple="multiple" class="form-control" asp-for="Accounts">
     <option>Test</option>
     <option>Test 1</option>
     <option>Test 2</option>
     <option>Test 3</option>
 </select>

<input type="hidden" id="accountInternal" name="accounts[]" value="" />

$("form").submit(function () {
    $("#accountInternal").val($("#account-list").val().toString());
    return true;
});

【讨论】:

    猜你喜欢
    • 2020-04-25
    • 2020-12-31
    • 2013-11-10
    • 2021-11-09
    • 1970-01-01
    • 1970-01-01
    • 2013-10-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多