Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC4中传递对象_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 4 - Fatal编程技术网

C# 在MVC4中传递对象

C# 在MVC4中传递对象,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,目前我在学习MVC4方面有点困难,我希望有人能帮我。据我所知,在搜索中没有重复出现这个问题,但如果有,请告诉我 我的问题是:在我的index.aspx页面上显示的学校列表中,是否有可能让用户单击“详细信息”链接,以便它返回并显示该特定学校的详细信息?我已经包含了下面代码中的所有相关信息,但是如果太多,请原谅(我不确定到底需要什么) 如您所见,ActionResult Index()返回数据库中所有学校的列表。我想做的是在他们点击“详细信息”时发回,这样视图就会返回该学校的具体信息。这可能吗?我想

目前我在学习MVC4方面有点困难,我希望有人能帮我。据我所知,在搜索中没有重复出现这个问题,但如果有,请告诉我

我的问题是:在我的index.aspx页面上显示的学校列表中,是否有可能让用户单击“详细信息”链接,以便它返回并显示该特定学校的详细信息?我已经包含了下面代码中的所有相关信息,但是如果太多,请原谅(我不确定到底需要什么)

如您所见,ActionResult Index()返回数据库中所有学校的列表。我想做的是在他们点击“详细信息”时发回,这样视图就会返回该学校的具体信息。这可能吗?我想可能只是传递被点击的学校的Id,但是当我回到DAC层时,它接受一个Id(int)作为参数,当我希望它返回一个类型为“school”的对象时。这有意义吗

值得一提的是,我知道一点Javascript,但还不知道jQuery、JSON等

所以我有5层:

  • Index.aspx(视图)
  • 校务主任(校务主任)
  • 校车(业务层)
  • SchoolDAC(数据库访问类)
  • SchoolVO(视图对象)
  • 我的视图对象:

        SchoolVO.cs:
                public int Id { get; set; }
                public string Name { get; set; }
                public string Slogan { get; set; }
    
    我的数据库访问类:

        SchoolDAC.cs
        public static School GetSchool(School school)
        {
            try
            {
                using (SqlConnection conn = ConnectionHelper.GetConnection("SchoolDB"))
                {
                    SqlCommand cmd = new SqlCommand("Schools.GetSchool", conn);
                    cmd.CommandType = CommandType.StoredProcedure;
                    cmd.Parameters.AddWithValue("@SchoolId", school.Id);
                    using (SqlDataReader dr = cmd.ExecuteReader())
                    {
                        if (dr.Read())
                        {
                            school = readRecord(dr);
                            // readRecord() is just another method that fills the 3 properties of the school object with data from the database.
                        }
                    }
                    return school;
                }
            }
            catch (Exception ex)
            {
                throw new Exception("Failed to get school", ex);
            }
        }
    
    我的“业务”层:

    我的控制器:

        SchoolController.cs:
    
        public ActionResult Index()
        {
            List<School> model = SchoolBus.GetAllSchools();
            return View(model);
        }
    
        [HttpPost]
        public ActionResult Index(School school)
        {
            School model = SchoolBus.GetSchool(school);
            return View(model);
        }
    
    SchoolController.cs:
    公共行动结果索引()
    {
    列表模型=SchoolBus.GetAllSchools();
    返回视图(模型);
    }
    [HttpPost]
    公共行动成果指数(学校)
    {
    学校模型=校车。GetSchool(学校);
    返回视图(模型);
    }
    
    我的看法是:

        index.aspx:
        <table>
            <tr>
                <th>
                    <%: Html.DisplayNameFor(model => model.Id) %>
                </th>
                <th>
                    <%: Html.DisplayNameFor(model => model.Name) %>
                </th>
                <th>
                    <%: Html.DisplayNameFor(model => model.Slogan) %>
                </th>
                <th></th>
            </tr>
    
        <% foreach (var item in Model) { %>
                    <tr>
                <td>
                    <%: Html.DisplayFor(modelItem => item.Id) %>
                </td>
                <td>
                    <%: Html.DisplayFor(modelItem => item.Name) %>
                </td>
                <td>
                    <%: Html.DisplayFor(modelItem => item.Slogan) %>
                </td>
                <td>    <!--- possible to pass an object through here? --->
                    <%: Html.ActionLink("Sign Up", "Index", new { id=item.Id }) %> |
                    <%: Html.ActionLink("Details", "Details", new { id=item.Id }) %> |
                    <%: Html.ActionLink("Delete", "Delete", new { id=item.Id }) %>
                </td>
            </tr>
        <% } %>
    
        </table>
    
    index.aspx:
    型号(Id)%>
    型号(名称)%%>
    型号(标语)%>
    项目Id)%>
    项目名称)%>
    项目.口号)%>
    |
    |
    
    您不应该将整个学校对象传递给控制器。我将向您展示我在项目中使用的类似方法:

            [HttpGet]
            public ActionResult Edit(int id)
            {
                DbUser editedDbUser = context.Users.Single(x => x.UserId == id);
                User editeduser = Mapper.Map<DbUser, User>(editedDbUser);
                return View("AccountInfo", editeduser);
            }
    
    [HttpGet]
    公共操作结果编辑(int id)
    {
    DbUser editedDbUser=context.Users.Single(x=>x.UserId==id);
    用户editeduser=Mapper.Map(editedBuser);
    返回视图(“AccountInfo”,编辑用户);
    }
    
    在我看来,我知道这是剃刀,但想法是一样的:

                <tr>
                    <td>@(i + 1)</td>
                    <td>@usersModel[i].LastName</td>
                    <td>@usersModel[i].FirstName</td>
                    <td>@usersModel[i].Email</td>
                    <td>@Html.ActionLink("Edit", "Edit", new { id = @usersModel[i].UserId })</td>
                </tr>
    
    
    @(i+1)
    @usersModel[i]。姓氏
    @usersModel[i].FirstName
    @usersModel[i]。电子邮件
    @ActionLink(“编辑”,“编辑”,新{id=@usersModel[i].UserId})
    
    为了回答您的问题,这是我的模型-它只是我在传递到视图之前填充的列表

    public class Users
        {
            public List<User> UsersBag { get; set; }
        }
    
    公共类用户
    {
    公共列表UsersBag{get;set;}
    }
    

    如果您的模型中没有Id,则必须具有另一个属性,您可以通过该属性区分列表中的对象,但我建议保留某种Id。

    您不应该将整个学校对象传递给控制器。我将向您展示我在项目中使用的类似方法:

            [HttpGet]
            public ActionResult Edit(int id)
            {
                DbUser editedDbUser = context.Users.Single(x => x.UserId == id);
                User editeduser = Mapper.Map<DbUser, User>(editedDbUser);
                return View("AccountInfo", editeduser);
            }
    
    [HttpGet]
    公共操作结果编辑(int id)
    {
    DbUser editedDbUser=context.Users.Single(x=>x.UserId==id);
    用户editeduser=Mapper.Map(editedBuser);
    返回视图(“AccountInfo”,编辑用户);
    }
    
    在我看来,我知道这是剃刀,但想法是一样的:

                <tr>
                    <td>@(i + 1)</td>
                    <td>@usersModel[i].LastName</td>
                    <td>@usersModel[i].FirstName</td>
                    <td>@usersModel[i].Email</td>
                    <td>@Html.ActionLink("Edit", "Edit", new { id = @usersModel[i].UserId })</td>
                </tr>
    
    
    @(i+1)
    @usersModel[i]。姓氏
    @usersModel[i].FirstName
    @usersModel[i]。电子邮件
    @ActionLink(“编辑”,“编辑”,新{id=@usersModel[i].UserId})
    
    为了回答您的问题,这是我的模型-它只是我在传递到视图之前填充的列表

    public class Users
        {
            public List<User> UsersBag { get; set; }
        }
    
    公共类用户
    {
    公共列表UsersBag{get;set;}
    }
    
    如果模型中没有Id,则必须具有另一个属性,通过该属性可以区分列表中的对象,但我建议保留某种Id。

    尝试这样做

    查看

    我的行动链接

     @Html.ActionLink("EditUser", "DYmanicControllerPage", "Test", new { Id = m.ID }, new { @class = "hide" })
    
    我的控制器

     [HttpGet]
     public ActionResult DYmanicControllerPage(string Id)
            {
                var model = new RegisterModel();
                int _ID = 0;
                int.TryParse(Id, out _ID);
                if (_ID > 0)
                {
                    RegisterModel register = GetRegisterUserById(_ID);
                    model.ID = _ID;
                    model.Name = register.Name;
                    model.Address = register.Address;
                    model.PhoneNo = register.PhoneNo;
    
            }
            return View(model);
        }
    
    我的“业务”层:

     public RegisterModel GetRegisterUserById(int Id)
            {
                RegisterModel model = new RegisterModel();
                using (dataDataContext _context = new dataDataContext())
                {
                    return model = (from r in _context.Registrations
                                    where r.RID == Id
                                    select new RegisterModel
                                    {
    
                                        ID = Id,
                                        Name = r.REName,
                                        Address = r.REAddress,
                                        PhoneNo = r.REPhoneNo
                                    }).FirstOrDefault();
                }
            }
    
    试着这样,

    查看

    我的行动链接

     @Html.ActionLink("EditUser", "DYmanicControllerPage", "Test", new { Id = m.ID }, new { @class = "hide" })
    
    我的控制器

     [HttpGet]
     public ActionResult DYmanicControllerPage(string Id)
            {
                var model = new RegisterModel();
                int _ID = 0;
                int.TryParse(Id, out _ID);
                if (_ID > 0)
                {
                    RegisterModel register = GetRegisterUserById(_ID);
                    model.ID = _ID;
                    model.Name = register.Name;
                    model.Address = register.Address;
                    model.PhoneNo = register.PhoneNo;
    
            }
            return View(model);
        }
    
    我的“业务”层:

     public RegisterModel GetRegisterUserById(int Id)
            {
                RegisterModel model = new RegisterModel();
                using (dataDataContext _context = new dataDataContext())
                {
                    return model = (from r in _context.Registrations
                                    where r.RID == Id
                                    select new RegisterModel
                                    {
    
                                        ID = Id,
                                        Name = r.REName,
                                        Address = r.REAddress,
                                        PhoneNo = r.REPhoneNo
                                    }).FirstOrDefault();
                }
            }
    

    迈克尔,我想我明白了。您正在使用[HttpGet]并让ActionResult获取一个Id,返回到同一个视图,但让您的标记(在本例中是Razor)获取@usersModel中的特定条目[i]?但有一个问题是,如果没有Id,标记中会发生什么?usersModel是否只是一个循环的列表(如果您的表行在循环中,则在上面的片段中)?@SalarianEngineer您得到的是正确的。要回答您的问题,请参阅我更新的postMichael,我想我理解。您使用[HttpGet]并让ActionResult获取Id,返回到同一视图,但让标记(Razor,在本例中)在@usersModel中获取特定的条目[i]?但有一个问题是,如果没有Id,标记中会发生什么?usersModel是否只是一个循环的列表(如果您的表行在循环中,则在上面的片段中)?@SalarianEngineer您得到的是正确的。要回答您的问题,请参阅我更新的postJaimin,这样您就可以通过Html传递Id