尝试将数据加载到新视图中

时间:2016-10-10 15:15:18

标签: javascript jquery asp.net asp.net-mvc

我试图创建一个"克隆"页面上的数据。总结是我有一个创建客户工作屏幕和一个单独的管理客户工作屏幕。这些都很好。我需要"克隆"已有的客户工作数据,以创建一组新的类似工作。所以在我的管理屏幕上,我有一个克隆按钮。我想让这个转到我的"创建"具有预先填充有原始数据的数据的页面,减去一个或两个相关的识别信息,例如,工作名称。

我的问题是我似乎无法使用视图模型中的新数据将帖子重定向到“创建”页面。我无法提交操作,因为这会保存数据;我克隆的数据不会在管理和创建屏幕之间保留。

我在这里:

在我的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视图。

我错过了什么?

3 个答案:

答案 0 :(得分:1)

首先,如果您要替换整个选项卡/窗口内容,请不要使用AJAX。没有意义,这只是需要额外维护的东西。相反,使用标准链接。其次,只有在某些事情发生变化时才应该进行POST。这里应该只是一个简单的GET请求。

创建指向“创建”网址的链接,并为正在克隆的作业传递ID。然后,在create操作中,您可以从数据库中查找该作业,根据该ID,使用数据填充视图模型,并将其与视图一起返回。

如果你想要一个按钮的外观,你可以设置链接的样式看起来像一个按钮,但你应该使用标准的旧<a>标签,因为这是语义含义。

答案 1 :(得分:0)

我已经设法进一步发展它现在“有效”。我的控制器没有改变,但我的javascript现在是:

$.when($.get('CloneJob', {jobId: jobId}))
.then(function (response) 
{ $("body").html(response); }); 

我知道这仍然是ajax,但面对技术上可接受的替代方案,这确实有效。我很乐意采取任何更先进技术的方法,因为我知道这有点滥用ajax。

答案 2 :(得分:0)

我设法破获了这个。

我的cshtml现在包含以下代码:

@Html.ActionLink("Clone Job", "CloneJob", null, new { @class = "btn btn-default", @style = "width: 150px" })

我的控制器只是从会话中获取当前的视图模型并使用它来克隆作业。然后,控制器现在只返回我在方法中设置的新模型的视图。

return View("CreateJob",  clonedJobViewModel);

当我看到它时,现在很简单,但它已经到了那里。