Получить свойства массива из вида в контроллер в MVC? - PullRequest
0 голосов
/ 03 июля 2019

Это моя форма для отправки

@using (Html.BeginForm("SigningAsync", "Signing", FormMethod.Post,
    new { onsubmit = "return confirm('Do you really want to submit the form?');"}))
    {
        <div class="col-md-6 col-sm-12 form-group" style="margin-bottom:5px !important">
            <input type="submit"
                   id="btnConf"
                   name="Sign" value="Confirm"
                   class="btn btn-primary pull-right" style="margin-right:2px" />
            <div class="form-group">
                <input type="hidden" id="arr" name="arr" />
            </div>

        </div>
    }

<input type="checkbox" value="@masterData.DocNo" name="selected" class="inforID" id="@masterData.NewDocNo" plant="@masterData.Plant" flowno="@masterData.FlowNo"/>

Когда флажок установлен и нажата кнопка подтверждения, я добавляю атрибут из флажка для ввода arr

$(document).ready(function() {
    $("#btnConf").click(function () {

        var selected = [];
        $.each($("input[name='selected']:checked"), function () {
            selected.push({
                DocNo: $(this).val(),
                NewDocNo: $(this).attr("id"),
                Plant: $(this).attr("plant"),
                FlowNo: $(this).attr("flowno")
            });
            document.getElementById("arr").value = JSON.stringify(selected);
        });
        console.log(JSON.stringify(selected));
    });
});

Ввод arr понравится

<div class="form-group">
    <input type="hidden" id="arr" name="arr" value="[
        {"DocNo":"100400020719-006","NewDocNo":"ABS-02072019","Plant":"VDNF","FlowNo":"FLW-000001"},
        {"DocNo":"100400020719-007","NewDocNo":"ABS-02072019","Plant":"VDNF","FlowNo":"FLW-000001"}
    ]">
</div>

А это Действие

public async Task<ActionResult> SigningAsync([Bind(Include = "arr")] PurchaseRequestViewModel purchaseRequestViewModel, string Sign, string[] arr)
{
    bool result = false;
    if(arr != null)
    {
        if (ModelState.IsValid && !String.IsNullOrWhiteSpace(Sign))
        {
            for(int i = 0; i < arr.Length; i++)
            {
              string test = a[i].NewDocNo;
            }
        }
    }
}

Я не могу получить свойство объекта в arr, я пробовал string test = a[i][NewDocNo]; или string test = a[i]["NewDocNo"];. Но это было не правильно. Как я могу получить свойства массива в контроллере?

Я пробовал console.log(selected[0].NewDocNo); в Javascript, и это нормально, но в Контроллере это было неправильно.

1 Ответ

1 голос
/ 03 июля 2019

Значение, которое вы имеете в своем HTML, будет обрабатываться как строковое значение, поскольку в контроллер не передается несколько значений. Вы передаете только одно значение. Вам нужно изменить сигнатуру метода и использовать string arr и иметь значение в виде строки. Затем выполните преобразование на сервере.

Кроме того, вместо отправки формы вручную, лучше использовать Javascript и AJAX для отправки данных. Затем вы можете передать значение arr в теле запроса как JSON. Тогда это будет автоматически преобразовано в массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...