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

Trying to load data into a new view

本文关键字:新视图 加载 数据      更新时间:2023-09-26

我有一个问题,试图在页面上创建数据的"克隆"。总结是,我有一个创建客户作业屏幕和一个单独的管理客户作业屏幕。这两个都很好。我需要"克隆"已经存在的客户作业数据,以创建一组新的类似的作业。在我的管理界面中,我有一个克隆按钮。我希望这能阻止我的"创建"页面的数据预先填充了原始数据,减去一个或两个相关的识别信息,例如工作名称。

我的问题是我似乎无法让帖子重定向到创建页面与我的新数据在视图模型中。我不能有一个提交动作,因为这会保存数据;我克隆的数据不会在管理和创建屏幕之间持久化。

我在这里:

在我的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);

当我看着它的时候,它现在很简单,但它是到达那里的部分。