Meg*_*att 5 asp.net-mvc jquery controller model getjson
我正在尝试使用JQuery的$ .getJSON来从Controller访问Model数据,并在javascript中构建一个JSON对象,以便在用户添加和删除列表中的项目时使用.所有JS都在外部文件中完成.模型数据在服务器上的命中仅在页面首次加载后完成,因此我可以获得用户可供选择的完整选项列表.之后,用户可以根据需要修改列表(并相应地更新JSON对象),然后将其保存(写回数据库).
但这是我的问题:当使用$ .getJSON时,我需要在Controller中调用的方法需要一个ID,以便它可以查找我正在讨论的特定资源并获取与该特定资源相关的选项列表.但是从外部JS文件中,我不知道如何将该ID传递给Controller.它内置在首先打开页面的链接中,并且位于URL中,但是一旦页面加载,我不知道如何获取此ID以将其传递给Controller.我在下面粘贴了一些代码,因为我知道这很令人困惑:
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");
}
Run Code Online (Sandbox Code Playgroud)
在我的外部JS文件中,我这样做:
$.getJSON("/Evaluation/PopulateJournalOptions/" + id, populateJSON);
Run Code Online (Sandbox Code Playgroud)
在Controller中,我编写了另一个名为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);
}
Run Code Online (Sandbox Code Playgroud)
同样,我的问题是,一旦页面加载,我就无法访问我需要传递给PopulateJournalOptions的ID.我已经尝试过不向PopulateJournalOptions传递任何东西,并在那里创建一个新对象并将其设置为等于(Evaluation)this.Model
,但是this.Model似乎是null,可能是因为它是从JS调用它的Controller的新实例.所以我有点被困在这里.有任何想法吗?
你有没有想过将id放入页面上的隐藏字段,然后让你的javascript从字段中读取id?
$.getJSON("/Evaluation/PopulateJournalOptions/" + $('#Id').attr('value'), populateJSON);
Run Code Online (Sandbox Code Playgroud)
那么,在你看来,
<%= Html.Hidden("Id") %>
Run Code Online (Sandbox Code Playgroud)
您的模型具有所需Id
的属性
归档时间: |
|
查看次数: |
7225 次 |
最近记录: |