我目前正在使用(在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")
仍然是相同的结果。
斯科特使用
asp-for="@model.SearchString"