Как привязка модели моего пользовательского HelperResult из View - PullRequest
0 голосов
/ 29 ноября 2018

В моем проекте ASP.NET MVC 5 я создал новый HelperResult.

Моя цель - создать повторно используемый компонент выпадающего списка автозаполнения (который содержит выборку начальной загрузки) с настройкой нескольких параметровможет предполагать поведение, отличное от необходимого, но особенно при использовании метода POST или API в POST для заполнения себя.

Кажется, что это работает хорошо, но недостаточно в действии обратной передачи.

Я не могупривязать мой помощник для получения данных при обратной передаче.Я не знаю, как получать данные из выпадающего списка ...

Чтобы быть более понятным, я хотел бы показать вам интерфейс

enter image description here

Ну, когда я нажимаю кнопку, я не знаю, как получить данные в контроллере.

Следуйте представлению, в которое я поместил новый 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>


    }

Это мой помощник, определенный в "UIHelper.cshtml" в 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();
}

если у вас есть другие решения, пожалуйста, дайте мне знать.ТНХ

1 Ответ

0 голосов
/ 03 декабря 2018

С помощью этой подписи для действия контроллера теперь вы можете извлекать данные:

[HttpPost]
public ActionResult testpost(List<string> cboItems)
{

    ViewBag.cboItems = string.Join("<br />", cboItems);
    return View();
}

даже в этом случае

[HttpPost]
public ActionResult testpost(string[] cboItems)
{

...

так что, я думаю,Класс ViewModel, используемый Controller и View, должен содержать эти поля.

...