使用C#.Net Core,如何将文本框的内容传递给模式

问题描述 投票:0回答:1

我目前正在使用(在C#.Net Core 2.1 Web应用程序中)一个视图,该视图旨在具有一个“搜索字符串”文本框和一个“添加项”按钮,该按钮应打开一个具有列表的模式(与数据库匹配)所有与搜索字符串匹配的项目,并带有“选择”按钮或链接以添加该项目。

但是我不知该如何将文本框结果传递给模态操作。

注:我知道我有一个解决方法,可以将其编码为完全独立的视图/动作(即不是模态),可能会在现有的表单提交动作中添加逻辑,但是如果我将可以保持模态的想法。

这里是到目前为止我尝试过的代码(但无济于事:

控制器:

    public IActionResult AddItem(string SearchString)
    {
        var model = _context.BasicItems
            .Where(i => i.Name.Contains(SearchString));

        return PartialView("_AddKitItem", model);
    }

在视图中,我有文本框和按钮(现在我使用的是ViewModel而不是原始的Model实体-注意:在这种情况下,ViewModel只是一个包含我要使用的原始实体的对象称为工具包-以及名为SearchString的字符串):

<div id="modal-placeholder"></div>

(然后是其他一些控件)

            <label asp-for="SearchString" class="control-label"></label>
            <input asp-for="SearchString" class="form-control" />


            <button type="button" class="btn btn-primary" data-toggle="ajax-modal" data-target="#add-item" data-url="@Url.Action("AddItem")">
                Search Item To Add
            </button>

我也有以下JS代码(我是从示例代码中提取的)

$(function () {
    var placeholderElement = $('#modal-placeholder');

    $('button[data-toggle="ajax-modal"]').click(function (event) {
        var url = $(this).data('url');
        $.get(url).done(function (data) {
            placeholderElement.html(data);
            placeholderElement.find('.modal').modal('show');
        });
    });

    placeholderElement.on('click', '[data-save="modal"]', function (event) {
        event.preventDefault();

        var form = $(this).parents('.modal').find('form');

        var actionUrl = form.attr('action');

        var dataToSend = form.serialize();

        $.post(actionUrl, dataToSend).done(function (data) {

            var newBody = $('.modal-body', data);
            placeholderElement.find('.modal-body').replaceWith(newBody);

            var isValid = newBody.find('[name="IsValid"]').val() == 'True';
            if (isValid) {
                placeholderElement.find('.modal').modal('hide');
            }
        });
    });
});

[这不起作用(通过在控制器中AddItem操作的第一行上放置一个断点并检查SearchString值-为空),在主视图上,我用以下内容替换了两个SearchString控件

@Html.DisplayNameFor(model => model.SearchString)
                    :
                    @Html.DisplayFor(model => model.SearchString)

但仍然没有运气-结果相同。

所以我什至尝试了:

Item Name:

                @Html.TextBox("SearchString")

仍然是相同的结果。

c# asp.net-core .net-core modal-dialog
1个回答
0
投票

斯科特使用

asp-for="@model.SearchString"
© www.soinside.com 2019 - 2024. All rights reserved.