我试图使用JQuery的$ .getJSON从控制器访问模型数据,并在JavaScript中构建一个JSON对象以供用户添加和删除项目一个列表。所有JS都在一个外部文件中完成。模型数据的命中仅在页面第一次加载后完成,因此我可以获得用户可供选择的完整选项列表。之后,用户可以根据需要修改列表(并相应更新JSON对象),然后将其保存(写回到数据库)。从外部Javascript文件访问ASP.NET MVC模型数据
但是,这里是我的问题:当使用$ .getJSON时,我需要在Controller中调用的方法需要一个ID,以便它可以查找我正在讨论的特定资源并获取相关选项的列表到那个特定的资源。但是从外部的JS文件中,我不知道如何让该ID传递给Controller。它内置于首先打开页面的链接中,并位于URL中,但一旦加载页面,我不知道如何获取此ID以便将其传递给Controller。我贴我的一些下面的代码,因为我知道这是令人困惑:
控制器中的详细方法,最初加载页面(需要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);
和Controller,我写了被调用,以构建JSON对象的另一种方法叫做PopulateJournalOptions:
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似乎为null,可能是因为它是从JS调用的Controller的新实例。所以我有点卡在这里。有任何想法吗?
我下面回答你的问题,我建议你获得良好的MVC书(来自Apress)并阅读关于请求生命周期的内容。 – 2009-11-14 21:36:33