我允许用户从视图上传文件,最终通过控制器操作传递给模型。但是,有一种特殊情况给我带来了麻烦。
我有跟随ViewModel,我正在传递给视图:
public class RegisterStudentViewModel
{
public Login loginViewModel;
public Person personViewModel;
public PersonResume personResViewModel;
}
提交表单时,我使用一些验证逻辑来确保输入的字段适用,如果任何验证失败,我将我正在使用的ViewModel发送回视图,以确保存储正确输入信息的字段。在此之前,我还确保上传的文件绑定到它所属的模型,如下所示:
if (res != null)
{
PersonResume resumeViewModel = createResume(res, personModel);
vm.personResViewModel = resumeViewModel;
}
SetUpView(vm, da);
result = View(vm);
}
这样当验证失败但是简历不是失败的字段之一并且我想显示上传的简历时,我可以在我的视图中使用以下代码:
@if (Model.personResViewModel != null && Model.personViewModel.id == 0)
{
<th class="editAddLabel">
@Html.LabelFor(model => model.personResViewModel.ResumeFileName, "Resume File Name")
</th>
<td>
@Html.ActionLink("View your resume", "linkDownload", "Student", new { id = Model.personViewModel.id, resume = Model.personResViewModel}, null)
</td>
}
传递给允许下载链接的以下控制器方法:
public FileResult linkDownload(int id, PersonResumeViewModel resume)
{
DataAccess da = new DataAccess();
PersonResume displayResume = new PersonResume();
if (id != 0)
{
displayResume = da.getPersonResumeByID(id);
}
else
{
displayResume.ResumeData = resume;
}
//some more code that downloads file
}
我知道在视图中,personResViewModel不是null,但是当我查看控制器方法时,它是null并且我无法对它做任何事情。我没有正确地传递我的论点吗?