ajax - 局部视图 - 控制器死胡同

时间:2015-11-20 09:06:51

标签: jquery ajax asp.net-mvc vb.net

这是我在这里的第一个问题 - 所以请轻松一下:)

我对mvc很新,我的背景是网页形式。

我的问题 -

我有一个带有许多菜单链接的单个页面 - 我有链接的jquery点击事件,当点击时使用ajax来调用控制器来获取局部视图 - 然后我将它加载到一个持有div中ajax回调函数来渲染局部视图。

部分视图之一是用于撰写邮件的“新邮件”部分,我需要能够向此视图添加附件。为此,我以模型弹出窗口的形式通过ajax加载另一个部分。我将模型加载到一个单独的保持div中,以免丢失撰写视图。

我将FormMethod.Post用于我填充附件视图模型的控制器。

此时我已达到死胡同 - 我不知道如何重新绑定“新邮件”视图以添加附件?

我知道如何做的唯一方法是客户端,我可以将“新消息”局部视图注入到更新模型的持有div中。但我无法使用任何JavaScript。

有没有办法从控制器执行此操作?或者我是否已经开始沿着通过ajax将部分加载到持有div中的路径向下射击?

任何帮助将不胜感激。

谢谢蒂姆

我的代码

主视图

    <div class="collapse navbar-collapse navbar-left" id="message-bar">
            <ul class="nav navbar-nav message-bar-list">
                <li>
                    <a data-js="Message" data-view-target="newMessage" href="#NewMessage">New Message</a>
                </li>
                <li>
                    <a href="#">Delete</a>
                </li>

                <li>
                    <a href="#">Move to Folder</a>
                </li>
                @*<li>
                        <a href="#">Reply</a>
                    </li>*@
                <li class="send" style="display:none; ">
                    <a data-js="Message" data-view-target="newAttachment" href="#addAttachment">Add Attachments</a>
                </li>
                @*<li class="send" style=" display:none; ">
                    <a href=" #send">Send</a>
                </li>*@
            </ul>
            <!--end of navbar-nav-->

        </div>
        <div class="col-xs-12 col-sm-10 col-md-10 col-lg-10">

        <div class="smPlaceholder">@Html.Partial("_Inbox", Model)</div>            
        <div class="hide" id="newMessage"></div> 
        <div class="hide" id="newAttachment"></div> 
    </div>

我的新消息局部视图

    @ModelType Model.ViewModel.Messages.Message

    @Using (Ajax.BeginForm("NewMessage", "Communication", New AjaxOptions With {.HttpMethod = "Post",
                                                                            .UpdateTargetId = "smPlaceholder",
                                                                            .OnSuccess = ""}))
    @Html.AntiForgeryToken()

    @<div class="new-message">
<label>To</label>

 @Html.TextBoxFor(Function(model) model.Message(0).Subject, New With {Key .placeholder = "Subject"})

 @Html.Partial("_AttachmentList", Model)

 <hr />
 @Html.TextAreaFor(Function(model) model.Message(0).Body, New With {.cols = "80", .rows = "4"})
 <button type="submit" class="button tp-green">Send Message</button>

结束使用

我的添加附件部分视图

    @ModelType  Model.ViewModel.Documents.Document

@Using (Html.BeginForm("fileUpload", "Communication", FormMethod.Post, New With {.enctype = "multipart/form-data"}))

@*@Html.HiddenFor(Function(model) model.FilesToBeUploaded)*@
@<div>
     <input type="file" id="fileToUpload" name="files" value="" multiple="multiple" />

     <div id="selectedFiles"></div>
</div>



@<div class="col-xs-12 message-attachement-content currentDocuments document-list">
        <h5>Existing documents</h5>

        <ul>
            @For i = 0 To Model.Document.Count - 1

            Dim a As Integer = i

             @<li class="documentListLI">
               @Html.HiddenFor(Function(model) model.Document(a).Id)
               @Html.HiddenFor(Function(model) model.Document(a).Description)
               @Html.CheckBoxFor(Function(model) model.Document(a).Checked, New With {.data_docid = Model.Document(a).Id, .data_name = Model.Document(a).Description}) <span>@Model.Document(a).Description</span>
            </li>

            Next
        </ul>
</div>

@<div>
     <input type="submit" value="Upload Document" title="Upload" />
</div>    
End Using        

我的JavaScript

    $('*[data-js="Message"]').on().off().on('click', function () {


            $('.send').css("display", "block")

            var dto = {
                Item: $(this).attr("data-view-target")
            }
            GlobalFunctions.callAjaxMethod("/Communication/addPartialView", dto, callback)

            function callback(data) {
                debugger

                if (data.page == "newMessage") {
                    $('.smPlaceholder').addClass("hide")
                    $('#newAttachment').addClass("hide")
                    $('#newMessage').removeClass("hide")

                    if ($('#newMessage').html() == "") {
                        $('#newMessage').html(data.partialViewString);
                    }
                } else if (data.page == "newAttachment") {
                    $('.smPlaceholder').addClass("hide")
                    $('#newAttachment').removeClass("hide")

                    if ($('#newAttachment').html() == "") {
                        $('#newAttachment').html(data.partialViewString);
                    }

                    $('#modalAttachmentManager').modal('show');

                }

            }

        });

我的控制器

    <HttpPost()>
    Function fileUpload(ByVal doc As Model.ViewModel.Documents.Document, files As HttpPostedFileBase()) As ActionResult

        'save uploaded attachments as temp files
        Dim fileName As String = ""
        Dim fileTypeTemp As String = ""
        Dim data As Byte() = {}
        Dim filesize As Integer = 0


        Dim temp_name As String = ""

        For Each item As HttpPostedFileBase In files
            If Not item Is Nothing Then
                If item.ContentLength > 0 Then
                    fileName = item.FileName

                    Dim target As New MemoryStream()
                    item.InputStream.CopyTo(target)
                    data = target.ToArray()

                    temp_name = Guid.NewGuid().ToString()

                    fileTypeTemp = System.IO.Path.GetExtension(fileName).ToString().ToLower()

                    filesize = item.ContentLength
                End If
            End If

            'call service to save files
            _ClientSecureMessageService.saveTempFileAttachment(data, Session("sessionId"), temp_name, fileName, Guid.NewGuid(), filesize, 1)

        Next

        'save system held docs as temp attachment files

        For Each item In doc.Document

            If item.Checked = True Then

                _Service.saveAttachment()

            End If

        Next

        'Need to populate the message/attachment object and rebind the new message view

        _Service.GetAttachments()

        Return RedirectToAction("addPartialView", New With {.Item = "#NewMessage"})
    End Function

忽略返回,因为这不起作用,并且是我达到死胡同的点。

希望这有帮助吗?

0 个答案:

没有答案