【问题标题】:Multiple submit buttons on same view using different action methods使用不同操作方法在同一视图上的多个提交按钮
【发布时间】:2011-08-03 13:07:03
【问题描述】:

我正在使用 ASP.NET MVC 3。

我有一个接受EditGrantApplicationViewModel 类型视图模型的视图。在这个视图模型中,我有属性。当第一次加载视图时,我将这个视图模型的实例传递给它:

public ActionResult Create()
{
   EditGrantApplicationViewModel viewModel = new EditGrantApplicationViewModel();

   return View(viewModel);
}

在这个视图中,我有一个提交按钮,它接受表单值并将其添加到数据库中。我在这个视图上还有另一个按钮,但不必单击它,单击时,它会获取员工编号,进行数据库查找并获取员工的详细信息。该数据返回到相同的视图,并用数据预填充该视图,以便用户不必键入数据。数据既可以通过这种方式检索,也可以手动输入。

然后用户可以继续输入其他字段并编辑从查找返回的任何字段。完成后,用户可以单击提交将其添加到数据库中。我该怎么做这样的事情?我是否需要在我的页面上使用表单,一个去 Create 操作方法,另一个去 GetEmployee 操作方法来进行数据库查找?我应该在我的页面上使用多个表单吗?如果是这样,拥有多种形式是最佳做法吗?任何代码示例将不胜感激:)

【问题讨论】:

  • 网络服务返回什么样的数据?
  • 员工姓名、姓氏、地址、分公司等
  • 抱歉,我的意思是它是 JSON、XML 等。您是否正在寻找如何通过 Ajax 执行此操作的示例?
  • 可能是数据库调用,仍在决定中。它需要使用 EditGrantApplicationViewModel。

标签: asp.net asp.net-mvc asp.net-mvc-3 asp.net-mvc-2


【解决方案1】:

当您单击按钮时,您可以使用 jquery 触发 AJAX 调用以返回一些 JSON 数据:

$("someButton").click(function() {
    $.ajax({
        url: "/Service/GetData",
        data: {}, // pass data here
        dataType: "json",
        type: "POST",
        success: function() {
            // manipulated return JSON data here
        }
    });
});

您可以有一个控制器来调用服务并返回 JSON,或者让服务执行此操作并跳过控制器。如果您在控制器中执行此操作:

public ActionResult GetData() {
    var someData = service.GetData();

    return Json(someData);
}

【讨论】:

  • 仍在决定是网络服务调用还是数据库查找。是的,我需要使用相同的 EditGrantApplicationViewModel 来填充这些文本字段。如果它是正常的数据库查找然后将其返回到视图,我将如何执行此操作?我的意思是我需要在页面上使用 2 个表单标签吗?请给我一些不错的示例代码吗?
  • 能否请你看看网上是否有类似的例子,因为我不明白你的代码。我在数据中指定了什么:和成功:?
  • 内部数据:将数据从视图放置到控制器。 (即data: { EmployeeNum: $('#employeeNum').val()}(您的数据名称应与控制器的参数名称匹配)您成功放置一个函数以在您的数据返回时完成,即填写所有空白字段success: function(data) { fillInFunction(data); } 其中fillInFunction(data) 需要包含要输入的数据的 JSON 对象,并填写您的每个字段 ex.$('#EmployeeName').val(data.EmployeeName)
  • 对此我仍然没有答案。我更新了我原来的帖子,你能看看它是否更清楚一点?如果我有一些可以使用的示例代码,我会更好地理解。
【解决方案2】:

假设员工详细信息是EditGrantApplicationViewModel 的一部分,您应该能够使用 Web 服务调用的结果填充表单上的字段。基本上它应该像用户手动输入值一样工作。只要您的字段名称正确,模型绑定器就会选择它。

我假设您的 Web 服务调用是来自使用 javascript 的页面的异步调用。

【讨论】:

  • 仍在决定是网络服务器还是数据库查找。是的,我需要使用相同的 EditGrantApplicationViewModel。请参阅我对 Dismissile 的回复。
猜你喜欢
  • 2012-06-07
  • 1970-01-01
  • 1970-01-01
  • 2011-12-13
  • 2016-06-19
  • 2012-05-28
  • 1970-01-01
  • 2016-12-04
  • 2011-12-18
相关资源
最近更新 更多