如何从 View 模型绑定我的自定义 HelperResult
How modelbinding my custom HelperResult from View
在我的 ASP.NET MVC 5 项目中,我创建了一个新的 HelperResult。
我的目标是创建一个可重复使用的自动完成下拉列表组件(包含 bootstrap-select)并设置多个参数可以根据需要假设不同的行为,但尤其是使用控制器方法或 POST 中的 API 填充自身。
似乎效果不错,但在回发操作中还不够。
我无法绑定我的助手以在回发操作中检索数据。
我不知道如何从组合框中获取数据 selected...
为了更清楚,我想给你看一下界面
嗯,当我按下按钮时,我不知道如何在控制器中获取数据。
关注我放置新 HelperResult 的视图
查看
@{
ViewBag.Title = "Test";
Layout = "";
}
<h2>Test</h2>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link href="~/UIComponent/bootstrap-select/css/bootstrap-select.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.bundle.min.js"></script>
<script src="~/UIComponent/bootstrap-select/js/bootstrap-select.js"></script>
@using (Html.BeginForm("testpost", "Home"))
{
<br />
<div style="padding:30px">
Lists
@UIHelper.HubCombo("/HUB/GetMezziOrdinari", "ID", "Descrizione", false, "Seleziona un item", "cboItems", "<b>Selezionare un item</b>", "ID")
<input type="submit" value="submit" id="btnSubmit" />
</div>
}
This is my Helper defined in the "UIHelper.cshtml" within App_Code
帮手
@helper HubCombo(string UrlHub,
string nomecampoValue,
string nomecampoText,
bool MultiSelection = false,
string placeholder = "",
string controlID = "cboSelect",
string header = "",
string subText = ""
)
{
string _subText = subText.Trim();
<select class=""
id="@controlID"
data-live-search="true"
title="@placeholder"
data-hide-disabled="true"
data-header="@header"
data-width="auto"
@if (MultiSelection)
{
<text>multiple</text>
}
>
</select>
<script type="text/javascript">
$.ajax({
url: '@UrlHub',
type: 'POST',
contentType: 'application/json',
data: '',
success: function (response) {
var options = [], _options;
$.each(response.Data, function (idx, obj) {
@{
if (_subText.Length>0)
{
<text>
options.push("<option data-subtext='"+ obj.@_subText+"' value='" + obj.@nomecampoValue + "'>" + obj.@nomecampoText + "</option>");
</text>
}
else
{
<text>
options.push("<option value='" + obj.@nomecampoValue + "'>" + obj.@nomecampoText + "</option>");
</text>
}
}
});
_options = options.join('');
$('#@controlID')[0].innerHTML = _options;
$('#@controlID').selectpicker();
}
});
</script>
}
最后是我的控制器,但我卡住了!
控制器
[HttpPost]
public ActionResult testpost()
{
//How to get value of my custom Helper Result?
return View();
}
如果您有其他解决方案,请告诉我。谢谢
有了控制器操作的这个签名,现在您可以检索数据:
[HttpPost]
public ActionResult testpost(List<string> cboItems)
{
ViewBag.cboItems = string.Join("<br />", cboItems);
return View();
}
即便如此
[HttpPost]
public ActionResult testpost(string[] cboItems)
{
...
所以,我认为 Controller 和 View 使用的 ViewModel class 应该包含这些字段。
在我的 ASP.NET MVC 5 项目中,我创建了一个新的 HelperResult。
我的目标是创建一个可重复使用的自动完成下拉列表组件(包含 bootstrap-select)并设置多个参数可以根据需要假设不同的行为,但尤其是使用控制器方法或 POST 中的 API 填充自身。
似乎效果不错,但在回发操作中还不够。
我无法绑定我的助手以在回发操作中检索数据。 我不知道如何从组合框中获取数据 selected...
为了更清楚,我想给你看一下界面
嗯,当我按下按钮时,我不知道如何在控制器中获取数据。
关注我放置新 HelperResult 的视图
查看
@{
ViewBag.Title = "Test";
Layout = "";
}
<h2>Test</h2>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/css/bootstrap.min.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link href="~/UIComponent/bootstrap-select/css/bootstrap-select.css" rel="stylesheet" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.0/js/bootstrap.bundle.min.js"></script>
<script src="~/UIComponent/bootstrap-select/js/bootstrap-select.js"></script>
@using (Html.BeginForm("testpost", "Home"))
{
<br />
<div style="padding:30px">
Lists
@UIHelper.HubCombo("/HUB/GetMezziOrdinari", "ID", "Descrizione", false, "Seleziona un item", "cboItems", "<b>Selezionare un item</b>", "ID")
<input type="submit" value="submit" id="btnSubmit" />
</div>
}
This is my Helper defined in the "UIHelper.cshtml" within App_Code
帮手
@helper HubCombo(string UrlHub,
string nomecampoValue,
string nomecampoText,
bool MultiSelection = false,
string placeholder = "",
string controlID = "cboSelect",
string header = "",
string subText = ""
)
{
string _subText = subText.Trim();
<select class=""
id="@controlID"
data-live-search="true"
title="@placeholder"
data-hide-disabled="true"
data-header="@header"
data-width="auto"
@if (MultiSelection)
{
<text>multiple</text>
}
>
</select>
<script type="text/javascript">
$.ajax({
url: '@UrlHub',
type: 'POST',
contentType: 'application/json',
data: '',
success: function (response) {
var options = [], _options;
$.each(response.Data, function (idx, obj) {
@{
if (_subText.Length>0)
{
<text>
options.push("<option data-subtext='"+ obj.@_subText+"' value='" + obj.@nomecampoValue + "'>" + obj.@nomecampoText + "</option>");
</text>
}
else
{
<text>
options.push("<option value='" + obj.@nomecampoValue + "'>" + obj.@nomecampoText + "</option>");
</text>
}
}
});
_options = options.join('');
$('#@controlID')[0].innerHTML = _options;
$('#@controlID').selectpicker();
}
});
</script>
}
最后是我的控制器,但我卡住了!
控制器
[HttpPost]
public ActionResult testpost()
{
//How to get value of my custom Helper Result?
return View();
}
如果您有其他解决方案,请告诉我。谢谢
有了控制器操作的这个签名,现在您可以检索数据:
[HttpPost]
public ActionResult testpost(List<string> cboItems)
{
ViewBag.cboItems = string.Join("<br />", cboItems);
return View();
}
即便如此
[HttpPost]
public ActionResult testpost(string[] cboItems)
{
...
所以,我认为 Controller 和 View 使用的 ViewModel class 应该包含这些字段。