首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用MVC4传递值的Java脚本

使用MVC4传递值的Java脚本
EN

Stack Overflow用户
提问于 2014-02-28 21:41:14
回答 1查看 90关注 0票数 0

我的Create视图是这样的:

代码语言:javascript
复制
@model ContactProject.Models.Activity.Activity
@{
ViewBag.Title = "Create";
IEnumerable<ContactProject.Models.Activity.Activity> activities = ViewBag.Activities;
}
    <div class="editor-label">
        @Html.Label("Project")
    </div>
    <div class="editor-field">
       @Html.DropDownList("Projects", ViewBag.Project as SelectList,"----Project----", new { id = "ProjectsID" })
       @Html.ValidationMessageFor(model => model.iProjectID)
    </div>
    <div class="editor-label">
        @Html.Label("Title")
    </div>
    <div class="editor-field" id="TitlesDivID">
        <select id="TitlesID" name="Titles"></select>
    </div>
// other codes...
if (activities !=null){
// Display activities.
}

这是我的JS代码

代码语言:javascript
复制
$('#ProjectsID').change(function () {
        var URL = 'TitleList';          
        $.getJSON(URL + '/' + $('#ProjectsID').val(), function (data) {
            var items = '<option>Select a Title</option>';
            $.each(data, function (i, title) {
                items += "<option value='" + title.Value + "'>" + title.Text + "</option>";
            if (items != null)
            {
                var addValue = $('#ProjectsID').val();             
                $.ajax
                ({ 
                    type: "POST",
                    url: "/Activity/getCreateActivities",
                    data: { projectID: addValue },
                    success: function (@ViewBag.Activities) {
                    }
                })
            }
        })    

基本上,我想用这个JS实现我的函数,不仅显示与项目相关的标题,而且显示所有活动都有相同的项目名称。

这就是为什么我在jquery回调函数中写“成功:函数(@ViewBag.Activities)”的原因。

下面是我的控制器中的方法:

代码语言:javascript
复制
public ActionResult getCreateActivities(string projectID) 
    {
    int iProjectID = Int32.Parse(projectID);
    ViewBag.Project = GetProjects();
    var Activities = (from a in db.Activities
                     where a.iProjectID == iProjectID
                     select a).ToList();
    ViewBag.Activities = Activities;
    return View("Create");
    }

但是当我使用断点进行调试时,会返回带有值和计数的@ViewBag.Activities,但似乎没有显示在我的屏幕上,有人对此有任何想法吗?如有任何贡献,将不胜感激。

更新:

代码语言:javascript
复制
<table>
@foreach (var item in Activities) {
<tr>
    <td>
        @Html.DisplayFor(modelItem => item.ProjectID)
    </td>
    <td>
        @Html.DisplayFor(modelItem => item.Project.ProjectName)
    </td>
</tr>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-28 21:46:15

如果使用ajax请求在ViewBag中设置一些值,则不会得到它。处理此问题的常规方法是,以JSON格式返回数据并访问它。

代码语言:javascript
复制
public ActionResult getCreateActivities(string projectID) 
{
    int iProjectID = Int32.Parse(projectID);        
    var Activities = (from a in db.Activities
                 where a.iProjectID == iProjectID
                 select a).ToList();

    return Json(new { Projects : GetProjects(),
                      Activities : Activities } ,JsonRequestBehaviour.AllowGet);
}

上面的内容将返回一个匿名对象的JSON表示,如下所示

代码语言:javascript
复制
{
    "Projects": [ { "Id": 2 } ],
    "Activities": [ { "id": 113,"Name": "My name" } ]
}

在ajax方法的成功回调中,访问它就像

代码语言:javascript
复制
success(function(data){
   // now you can acceess data.Projects and data.Activities
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22106367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档