我在尝试在页面上创建数据“克隆”时遇到问题。简而言之,我有一个创建客户作业屏幕和一个单独的管理客户作业屏幕。这些都工作得很好。我需要“克隆”现有的客户工作数据以创建一组新的类似工作。所以在我的管理屏幕中,我有一个克隆按钮。我希望它进入我的“创建”页面,其中的数据预先填充了原始数据,减去一两个相关的识别信息,例如职位名称。
我的问题是,我似乎无法使用 View 模型中的新数据将帖子重定向到“创建”页面。我无法进行提交操作,因为这会保存数据;我正在克隆的数据不会在管理和创建屏幕之间保留。
这是我所在的位置:
在我的 CSHTML 中:
<button type="button" name="btnClone" value="btnClone" id="btnClone" formaction="CloneJob" class="btn btn-primary" style="width: 150px;">Clone</button>
这会触发一个点击事件来获取当前的 jobId,然后触发此函数:
function CloneJob(jobId) {
$.post('CloneJob', { JobId: jobId }, function (data) {
window.document(data);
});
}
在我的 Controller 中,我有这个:
[HttpPost]
public ActionResult CloneJob(Guid jobId) {
// logic which wipes off the old data job from the view model
// eg names, ids, etc. but leaves the actual job details intact
return View("CreateJob", manageJobViewModel);
从中,我可以看到 IE/Chrome 调试网络部分返回的 HTML,但它不会转到填充了数据的 CreateJob View 。
我错过了什么?
最佳答案
首先,如果您要替换整个选项卡/窗口内容,请不要使用 AJAX。没有任何意义,只是需要额外维护一些东西。请改用标准链接。其次,只有当事情发生变化时才应该进行 POST。这里应该只是一个简单的 GET 请求。
创建指向“创建”URL 的链接并传递正在克隆的作业的 ID。然后,在创建操作中,您可以根据该 ID 从数据库中查找该作业,用数据填充您的 View 模型,然后将其与 View 一起返回。
如果您想要按钮的外观,您可以将链接样式设置为看起来像按钮,但您应该使用标准的旧 <a>
标签,因为这就是这里的语义。
关于javascript - 尝试将数据加载到新 View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39961487/