【问题标题】:how to pass id across tabs in mvc razor view如何在 mvc razor 视图中跨选项卡传递 id
【发布时间】:2016-03-03 16:29:57
【问题描述】:

我有一个带有多个引导选项卡的 mvc 视图。在第一个选项卡中单击保存后,将在数据库中生成一个条目,并生成一个 id(数据库中的身份密钥)。当我单击下一个选项卡(我使用 jQuery 单击事件)时,我想传递从第一个选项卡生成的 id。

 @model MyProject.ViewModels.MydatabaseMyVM
 <div class="container">   
<div class="row">
    <h2>
        Create Staff</h2>
</div>
@using (Html.BeginForm())
{
<ul id="datatabs" class="nav nav-tabs nav-justified">
        <li class="active"><a data-toggle="tab" href="#details" id="TabDetailsLink">Personal
            Details</a></li>
        <li><a data-toggle="tab" href="#Tab1" id="TabTab1Link">Tab1</a></li>
        <li><a data-toggle="tab" href="#Tab2" id="TabTab2Link">Tab2</a></li>
        <li><a data-toggle="tab" href="#Tab3" id="TabTab3Link">Tab3</a></li>
    </ul>

 var data = $form.serialize(); $.post(url, data).done(function () {}. 

在我的第一个选项卡中,我有来自学生模型的字段,其中有一个将从数据库生成的 id。保存后,我想保留该 ID,当我单击另一个选项卡时,该 ID 应通过 ajax 调用传递给操作。 我正在使用 mvc 4 razor 视图和 Bootstrap 选项卡。 有人可以指导我如何将数据库生成的 id 从一个选项卡传递到另一个选项卡。 EF用于访问数据库

【问题讨论】:

  • 如何在第一个选项卡上保存数据?我的意思是您是在发布表单还是通过 ajax 发布?另外,您使用什么技术访问数据库?
  • 1. Ajax 调用 2.EF 进行数据库访问。

标签: jquery asp.net-mvc asp.net-mvc-4 asp.net-ajax


【解决方案1】:

如果我理解正确,在第一个选项卡上,当您单击保存时,您使用 ajax 将表单发布到 StaffCreate(),它返回一个视图(不太清楚为什么要返回一个视图,但我会假设它在其他地方使用)。

是否可以在发布到 StaffCreate() 时,将 staffId 保存在会话中。

然后,当您单击第二个选项卡时,在您的 jquery 单击事件中,首先对仅返回员工 ID 作为 Json 结果的操作执行获取请求,一旦您获得该 ID,就可以使用它做任何您想做的事情。

所以一个伪代码类似于:

// your current action
[HttpPost]
public ActionResult StaffCreate(MydatabaseMyVMstaffvm)
{
    // previous omitted for simplicity

        Staff objStaff = MyService.StaffCreate(staffvm.Staff);
      
        Session["StaffId"] = objStaff.StaffID;
    // reset omitted for simplicity
}

获取 StaffId 的操作

public ActionResult GetCreatedStaffId()
{
    return Json(Session["StaffId"], JsonRequestBehavior.AllowGet)
}

// your tab click event
$("").click(function{
    $.getJSON( "@Url.Action("GetCreatedStaffId")", function( data ) {
        // data is your StaffId
    }
})

方法 2 伪代码将 StaffId 存储在隐藏输入中

在您在 StaffCreate() 中返回的视图中,执行类似的操作

<input type="hidden" id="hidStaffId" value="@Model.Staff.StaffID" />

你的标签点击事件

// your tab click event
$("").click(function{
    var staffId = $("#hidStaffId").val();
})

【讨论】:

  • 没有会话变量有什么方法可以使用
  • 我能想到的可能有两种:1.当你返回视图时,创建一个隐藏的输入来存储id,然后当标签点击时,使用jquery从隐藏的输入中获取值- 但这可能是有缺陷的,因为任何人都可以更改隐藏的输入值。 2. 当 ajax 号召性用语时,不要从会话中读取,而是使用您拥有的员工信息重新查询数据库。
  • 你能给我看一个创建隐藏输入的示例代码吗
  • 我得到空引用异常..加载视图时不会生成 id。
  • 让我检查一下 ir 是否存在
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-10-11
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 1970-01-01
  • 2020-04-24
  • 1970-01-01
相关资源
最近更新 更多