我有这样的观点:
<div id="basic-information-container">
@Html.Action("MyBasicInformation")
</div>
<div id="cv-container">
@Html.Action("MyCv")
</div>
<div id="experiance-container">
@Html.Action("MyExperiances")
</div>
<div id="academic-background-container">
@Html.Action("MyAcademicBackgrounds")
</div>
部分视图MyCv是:
@model Model.Profile.CvModel
<script type="text/javascript">
$(function () {
$("#cv-container form").submit(function () {
$(this).ajaxSubmit({
target: "#cv-container",
cache: false
});
return false;
});
});
</script>
@using(Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Cv</legend>
@Html.EditorFor(model => model.File)
@* I have working editor template for HttpPostedFileBase, nothing to worry about this*@
@Html.ValidationMessageFor(model => model.File)
<p>
<input type="submit" value="Upload" />
</p>
</fieldset>
}
这是CvModel的代码
public class CvModel {
public int? Id { get; set; }
[Required]
public HttpPostedFileBase File { get; set; }
public CvModel() {
}
public CvModel(int? cvId) {
Id = cvId;
}
}
这是MyCv的post方法
[HttpPost]
public ActionResult MyCv(CvModel model) {
// upload cv to database
return PartialView(model);
}
现在问题是,当我上传CV时出于某种未知原因,MyBasicInformation, MyExperiances and MyAcademicBackgrounds
的部分视图正在重新加载。我找不到我做错了什么。我在哪里做错了?
顺便说一句,我已经知道MyBasicInformation, MyExperiances and MyAcademicBackgrounds
的获取动作没有被调用。意见正在重新加载。
答案 0 :(得分:2)
由于您正在使用子操作,因此您必须在表单中明确指定要发布到的操作,否则表单可能无法提交给正确的操作。此外,您在表单上缺少上传文件所需的enctype="multipart/form-data"
:
所以:
@using(Html.BeginForm()) {
应该成为:
@using (Html.BeginForm("MyCv", "SomeController", FormMethod.Post, new { enctype = "multipart/form-data" }))
同时检查FireBug是否存在控制台中的潜在错误。确保成功发送AJAX请求。确保第二次重新连接.submit()
事件。