这是我在这里的第一个问题 - 所以请轻松一下:)
我对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
忽略返回,因为这不起作用,并且是我达到死胡同的点。
希望这有帮助吗?