Две модели в одном частичном представлении MVC - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть основной вид, который запускает частичный вид после нажатия кнопки.Первоначально я хотел, чтобы частичное представление возвращало данные обратно пользователю, но я решил добавить дополнительную POST обратно в контроллер, однако это тип модели, отличный от отображаемой страницы.

Главный вид

@model List<Info>

@{
    ViewBag.Title = "InfoPage";
}
</br></br></br></br>

<div id="DetailDIV"></div>

<table class="table table-bordered table-responsive table-hover">
    <tr>
        <th>Info</th>
        <th>stuff</th>
        <th>more info</th>
        <th>Created</th>
    </tr>
    @foreach (var item in Model)
    {
    <tr onclick="DetailedView(@item.Info_ID)">
        <td>
            @item.InfoTitle
        </td>
        <td>
            @item.stuff
        </td>
        <td>
            @item.moreInfo
        </td>
        <td>
            @item.Create_Date
        </td>
    </tr>
    }
</table>


    function DetailedView(id) {
        var url = '@Url.Action("GetInfoModal", "Info", new { Info_ID = "replaceToken" })'.replace("replaceToken", id);
        $("#DetailDIV").load(url, function (responseTxt, statusTxt, xhr) {
            // debugger;
            if (statusTxt == "success") {
                $('body #DetailModal').modal('show');
            }
            if (statusTxt == "error") {
                console.log("Error: " + xhr.status + ": " + xhr.statusText);
            }
        });
    }
</script>

Частичный вид

@model Info


<!-- Modal -->
<div class="modal fade" id="DetailModal" tabindex="-1" role="dialog" aria-labelledby="DetailModalLabel">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                    <span aria-hidden="true">&times;</span>
                </button>
                <h4 class="modal-title" id="DetailModalLabel">@Model.InfoTitle</h4>
            </div>
            <div class="modal-body">
                <div>
                    <div class="col-md-6">
                        more info stuff...
                    </div>
                    <div class="col-md-6">
                        even more info stuff
                    </div>    
                    <div width="100%">
                        <button id="QuestionButton" type="button" class="btn btn-primary" onclick="OpenQuestionBox()">Message</button>
                        <div id="QuestionBox" hidden>
                            <textarea id="QuestionContent" placeholder="Question Content"></textarea>
                            <button type="button" class="btn btn-primary" onclick="SendQuestion(@Model.info_ID)">Send Message</button>
                        </div>
                    </div>
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn" data-dismiss="modal">Close</button>
                    @*<button type="submit" class="btn btn-primary">Save Changes</button>*@
                </div>
            </div>
        </div>
    </div>
</div>

<script type="text/javascript">
    function OpenQuestionBox() {
        $('#QuestionButton').hide();
        $('#QuestionBox').show();
    }
    }
</script>

Как вы можете видеть, модель в деталях модальная InfoТем не менее, я хотел бы отослать обратно в поле вопроса только строку, если у пользователя возникнут вопросы.Я также хотел бы пропустить Info_ID, чтобы иметь возможность связать вопрос с правильными данными.Я попытался использовать AJAX, аналогично тому, что я делал на главном экране, но получил .Replace doesnt exist, и это заставило меня задуматься, есть ли лучший или более простой способ сделать это.

Вот ajax Iпробовал:

$.ajax({
            url: '@Url.Action("SendQuestion", "Info", new { content = "Content~text", InfoID = "Info_id" })'.Replace("Content~text", text).Replace("Info_id", id),
            type: 'POST',
            dataType: 'json',
            data: {
                content: text,
                Info_id: id
            },
            success: function (result) {
                alert(result);
            }
        });

1 Ответ

0 голосов
/ 19 ноября 2018

Вы можете сделать это так:

    var QuestionData = {
         content = $("#QuestionContent").val(),
         InfoID = $("#Info_id").val()
    };

    $("#SendQuestion").click(function () {

         $.ajax({
            url: 'Info/SendQuestion',
            type: 'POST',
            dataType: 'json',
            data: QuestionData,
            success: function (result) {
               alert(result);
         }
    });

});

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