尝试将数据加载到新视图中
Trying to load data into a new view
我有一个问题,试图在页面上创建数据的"克隆"。总结是,我有一个创建客户作业屏幕和一个单独的管理客户作业屏幕。这两个都很好。我需要"克隆"已经存在的客户作业数据,以创建一组新的类似的作业。在我的管理界面中,我有一个克隆按钮。我希望这能阻止我的"创建"页面的数据预先填充了原始数据,减去一个或两个相关的识别信息,例如工作名称。
我的问题是我似乎无法让帖子重定向到创建页面与我的新数据在视图模型中。我不能有一个提交动作,因为这会保存数据;我克隆的数据不会在管理和创建屏幕之间持久化。
我在这里:
在我的CSHTML中:
<button type="button" name="btnClone" value="btnClone" id="btnClone" formaction="CloneJob" class="btn btn-primary" style="width: 150px;">Clone</button>
触发一个click事件来获取当前的jobId,然后触发这个函数:
function CloneJob(jobId) {
$.post('CloneJob', { JobId: jobId }, function (data) {
window.document(data);
});
}
在我的控制器中,我有这个:
[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视图填充的数据。
我错过了什么?
首先,如果要替换整个选项卡/窗口内容,不要使用AJAX。没有任何意义,只是需要维护一些额外的东西。相反,使用标准链接。其次,POST应该只在发生变化时进行。这里应该只是一个简单的GET请求。
创建指向" Create " URL的链接,并传递正在克隆的作业的id。然后,在create操作中,您可以根据该id从数据库中查找该作业,用数据填充视图模型,并将其与视图一起返回。
如果你想要一个按钮的外观,你可以只是样式链接看起来像一个按钮,但你应该使用一个标准的旧的<a>
标记,因为这是这里的语义含义。
我已经设法得到进一步,它现在"工作"。我的控制器是不变的,但我的javascript现在是:
$.when($.get('CloneJob', {jobId: jobId}))
.then(function (response)
{ $("body").html(response); });
我知道这仍然是ajax,但面对技术上更可接受的替代方案,这确实有效。我很乐意采取任何技术上更整洁的方法,因为我知道这是ajax的一点误用。
我已经设法破解了这个。
我的cshtml现在包含以下代码:
@Html.ActionLink("Clone Job", "CloneJob", null, new { @class = "btn btn-default", @style = "width: 150px" })
我的控制器只是从会话中获取当前视图模型,并使用它来克隆作业。然后,控制器现在只需返回带有我在方法中设置的新模型的视图。
return View("CreateJob", clonedJobViewModel);
当我看着它的时候,它现在很简单,但它是到达那里的部分。
- AngularJS - ngRoute - 视图加载完成后的回调
- 在Grails中使用Asset-Pipeline Plugin制作一个视图加载特定的JavaScript
- 每15天为新用户加载一次放大弹出菜单
- 在ng视图加载或指令加载后运行javascript
- 支持使用Backbone.js视图加载异步模板
- 视图加载后初始化工具提示
- 在解决Firebase GetRecord之前,视图加载不完整
- 将部分视图加载到JQuery对话框中的缓存问题
- 正在显示加载..在将新图像加载到网站时播放动画
- Drupal 视图加载时间太长
- Javascript & Soundcloud Widget:如何将新曲目加载到 SC Widget iFram
- 如何在 MVC 4 中将不同的部分视图加载到引导模式
- 在新页面加载时保持 JavaScript 菜单打开
- 强制 post 请求在新页面加载之前完成提交
- 将新内容加载到响应式滑块中
- 使元素中的所有链接将新内容加载到同一元素中
- 如何在新页面加载后提交 CFform 并更改其操作属性
- 每个视图加载一个控制器AngularJS
- 使用Zend Framework应用程序将子视图加载到IFrame中
- 不要在新页面加载或刷新时渲染React组件