5

我正在尝试使用 JQuery 的 $.getJSON 从控制器访问模型数据,并在 javascript 中构建一个 JSON 对象,以供用户在列表中添加和删除项目时使用。所有 JS 都在一个外部文件中完成。在页面首次加载后,只对服务器进行一次模型数据的访问,因此我可以获得完整的选项列表供用户选择。之后,用户可以根据需要修改列表(并且 JSON 对象会相应更新),然后将其保存(写回数据库)。

但这是我的问题:使用 $.getJSON 时,我需要在 Controller 中调用的方法需要一个 ID,以便它可以查找我正在谈论的特定资源并返回与该特定资源相关的选项列表. 但是从外部 JS 文件中,我不知道如何将该 ID 传递给控制器​​。它内置在首先打开页面的链接中,并且位于 URL 中,但是一旦页面加载,我不知道如何获取此 ID 以便将其传递给控制器​​。我在下面粘贴了一些代码,因为我知道这很令人困惑:

最初加载页面的 Controller 中的 Details 方法(需要一个 resourceID 来知道要加载什么):

public ActionResult Details(string resId)
{
    //call base method
    base.Details(resId, resourceType);
    Evaluation eval = (Evaluation)this.Model;
    ViewData.Model = eval;
    return View("Index");
}

在我的外部 JS 文件中,我这样做:

$.getJSON("/Evaluation/PopulateJournalOptions/" + id, populateJSON);

在控制器中,我编写了另一个名为 PopulateJournalOptions 的方法,该方法被调用来构建 JSON 对象:

public JsonResult PopulateJournalOptions(string resId)
{
   JournalOptionsResult jsonResult = new JournalOptionsResult();

   base.Details(resId, resourceType);
   Evaluation eval = (Evaluation)this.Model;

   jsonResult.Activities = eval.Journal.Activities;
   jsonResult.Issues = eval.Journal.Issues;
   jsonResult.ScheduledActions = eval.Journal.ScheduledActions;

   return Json(jsonResult);
}

同样,我的问题是,一旦页面加载,我就无法访问需要传递给 PopulateJournalOptions 的 ID。我试过不向 PopulateJournalOptions 传递任何东西,并在那里创建一个新对象并将其设置为等于(Evaluation)this.Model,但是 this.Model 似乎为空,可能是因为它是从 JS 调用的 Controller 的新实例。所以我有点卡在这里。有任何想法吗?

4

2 回答 2

5

您是否考虑过将 id 放入页面上的隐藏字段,然后让您的 javascript 从该字段中读取 id?

$.getJSON("/Evaluation/PopulateJournalOptions/" + $('#Id').attr('value'), populateJSON);

那么,在你看来,

<%= Html.Hidden("Id") %>

随着您的模型具有所需Id的属性

于 2009-11-14T23:40:01.270 回答
0

把它放在控制器中:

ViewData["resouceID"] = resouceID;

把它放在最初加载的视图中:

<script>
$(document).ready(function() {
    $.getJSON("<%=Url.Action("YourActionName", "YourControllerName", new {id = ViewData["resouceID"]}) %>", populateJSON);
});
</script>
于 2009-11-14T21:34:33.247 回答