Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >ASP.NET MVC - Html.ActionLink routeValues中的故障传递模型

ASP.NET MVC - Html.ActionLink routeValues中的故障传递模型
EN

Stack Overflow用户
提问于 2010-11-16 18:48:40
回答 6查看 31.3K关注 0票数 13

我的视图如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<%@ Control Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<TMS.MVC.BusinessSystemsSupport.Models.SearchDataTypeModel>" %>


<table class="classQueryResultsTable">
   <!-- the header -->
  <tr class="headerRow">

      <td>
      <%= Html.ActionLink("Effective Startdate",
                  "SortDetails",
                  "DataQryUpdate",
                  new
                  {
                      model = Model,
                      sortBy = "EffectiveStartDate",
                  },
                  new { @class = "classLinkLogDetails" })%>
      </td>

  </tr>


</table>

我的控制器操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    public ActionResult SortDetails(SearchDataTypeModel model, String sortBy)
    {

模型参数为空。将填充sortBy参数。我可以毫无问题地将字符串属性从模型传递给操作。不过,我想传入整个模型。

你知道我做错了什么吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-11-16 18:58:19

另一种选择是将所需数据持久化到TempData中。这将把它传递给下一个请求,您可以在那里检索它。如果你愿意,你应该能够持久化整个模型对象。

但更简单(也是更好的做法)是从数据库中再次检索它,如Darin所建议的那样。

票数 3
EN

Stack Overflow用户

发布于 2010-11-16 18:52:18

不能传递复杂的对象:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new
{
    model = Model,
    sortBy = "EffectiveStartDate",
},

model = Model没有任何意义,不能使用GET发送。您可能需要使用具有编辑器模板和/或隐藏字段的表单来发送所有模型属性。请记住,只能在查询字符串(key1=value1&key2=value2...)中发送标量值。脑海中浮现的另一个选择是只发送ID:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
new
{
    modelId = Model.Id,
    sortBy = "EffectiveStartDate",
},

在您的控制器操作中,从您的数据存储中获取给定此id的模型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
public ActionResult SortDetails(int modelId, String sortBy)
{
    var model = repository.GetModel(modelId);
    ...
}

当然,只有当用户不应该编辑表单中的模型属性时,才会出现这种情况。这取决于您的方案。

为了完整起见,让我们公开另一个选项:使用MVC Futures的Html.Serialize助手将整个模型序列化到一个隐藏字段中,该字段可以传递回控制器操作并在那里反序列化。

票数 16
EN

Stack Overflow用户

发布于 2013-01-30 05:09:44

在ActionLink中,还有另一种将模型或复杂对象作为RouteValues传递的方法。

  1. 模型:让类中的静态方法序列化和反序列化,如下所示

public class XYZ { //某些字段公共字符串X{ get;set;}公共字符串Y{ get;set;}公共字符串X{ get;set;} //这会将传递的XYZ对象转换为JSON字符串公共静态字符串序列化(Xyz xyz) { var serializer = new JavaScriptSerializer();return serializer.Serialize(xyz);} //这会将传递的JSON字符串转换回XYZ object public static XYZ Action ( string data) { var serializer = new JavaScriptSerializer();return serializer.Deserialize(data);}}

  • 视图:在将复杂对象传递到操作视图之前,请先将其转换为JSON字符串

})%>

  • CONTROLLER:(Model.x,“<%=”,Html.ActionLink{ modelString =XYZ.Serialize(模型)操作方法中获取对象为字符串,并在使用前将其转换回object

public ActionResult SomeAction(string modelString) { XYX xyz = XYX.Deserialize(modelString);}

就这些了..。

注意:在其他答案中讨论的技术在模型的情况下已经足够好了,但有时您需要将一些复杂的对象(而不是数据库模型)传递回控制器,就像我有这样的特定情况一样。

希望这篇文章能帮助到一些...:)

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4197811

复制
相关文章
ASP.NET MVC 5– 使用Wijmo MVC 5模板1分钟创建应用
开始使用 使用Wijmo制作MVC5应用程序,首先要做的是安装Wijmo 。 测试环境 VS2013(VS2010,VS2012支持MVC3,MVC4)、MVC5、Framework4.5、IE11、
葡萄城控件
2018/01/10
2.4K0
ASP.NET MVC 5– 使用Wijmo MVC 5模板1分钟创建应用
ASP.NET MVC 5 -从控制器访问数据模型
在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里。 在开始下一步前,先Build一下应用程序(生
葡萄城控件
2018/01/10
5.9K0
ASP.NET MVC 5 -从控制器访问数据模型
ASP.NET MVC编程——视图
1Razon语法 使用@符号后接C#或VB.NET语句的方式。 基本规则 1)变量 @后直接变量即可 2)代码块 为使用表达式或多行代码,@后跟大括号将多行代码包括在大括号中 3)“+” 对于加号连接的两个字符串变量或属性,使用小括号将他们括起来 4)插入HTML或文字 每一行前面加上“@:” 5)使用注释 使用@*和*@将要注释的部分包起来 6)用@@在页面上显示@ @using 在一个View中引入此页所需程序集的命名空间。 还可以在web.config中配置命名空间,不过将对所有的View起作用。 <
甜橙很酸
2018/03/30
3.1K0
ASP.NET MVC (二、数据传递)
ASP.NET MVC是最简洁、最方便、最高效、最快速的小型网站开发的方法,本文可以让一个小白用最快速的方式学会网站开发。
红目香薰
2022/11/29
1.1K0
ASP.NET MVC (二、数据传递)
精通MVC3摘译(2)-生成URL
处理发来的URL只是MVC中的一部分,我们也需要生成一些URL植入到我们的view中,让用户点击,并提交表单到目标controller和action,下面会介绍一些生成URL的技巧。
py3study
2020/01/09
8190
Asp.Net MVC4入门指南(6):验证编辑方法和编辑视图
在本节中,您将开始修改为电影控制器所新加的操作方法和视图。然后,您将添加一个自定义的搜索页。 在浏览器地址栏里追加/Movies, 浏览到Movies页面。并进入编辑(Edit)页面。 Edit(编辑
葡萄城控件
2018/01/10
4.3K0
Asp.Net MVC4入门指南(6):验证编辑方法和编辑视图
ASP.NET MVC 5 - 视图
在本节中,你要去修改HelloWorldController类,使用视图模板文件,在干净利索地封装的过程中:客户端浏览器生成HTML。 您将创建一个视图模板文件,其中使用了ASP.NET MVC 3所引入的Razor视图引擎(Razor view engine)。Razor视图模板文件使用.cshtml文件扩展名,并提供了一个优雅的方式来使用C#语言创建所要输出的HTML。用Razor编写一个视图模板文件时,将所需的字符和键盘敲击数量降到了最低,并实现了快速,流畅的编码工作流程。 当前在控制器类中的Inde
葡萄城控件
2018/01/10
3.2K0
ASP.NET MVC 5 - 视图
ASP.NET MVC5中View-Controller间数据的传递
使用ASP.NET MVC做开发时,经常需要在页面(View)和控制器(Controller)之间传递数据,那么都有哪些数据传递的方式呢?
雪飞鸿
2018/09/05
2.7K0
ASP.NET MVC5中View-Controller间数据的传递
七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递
通过第一天的学习之后,我们相信您已经对MVC有一些基本了解。 本节所讲的内容是在上节的基础之上,因此需要确保您是否掌握了上一节的内容。本章的目标是在今天学习结束时利用最佳实践解决方案创建一个小型的MV
葡萄城控件
2018/01/10
2.3K0
七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递
ASP.NET MVC 5 - 给电影表和模型添加新字段
在本节中,您将使用Entity Framework Code First来实现模型类上的操作。从而使得这些操作和变更,可以应用到数据库中。 默认情况下,就像您在之前的教程中所作的那样,使用 Entity Framework Code First自动创建一个数据库,Code First为数据库所添加的表,将帮助您跟踪数据库是否和从它生成的模型类是同步的。如果他们不是同步的,Entity Framework将抛出一个错误。这非常方便的在开发时就可以发现错误,否则您可能会在运行时才发现这个问题。 为对象模型的变更
葡萄城控件
2018/01/10
2.4K0
ASP.NET MVC 5 - 给电影表和模型添加新字段
Asp.Net MVC4入门指南(5):从控制器访问数据模型
在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里。 在开始下一步前,先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题) 用鼠标右键单击Controller文件夹,并创建一个新的 MoviesController控制器。当Build成功后,会出现下面的选项。设定以下选项: · 控制器名称: MoviesController.(这是默认值)。 · 模板: MVC Controller wit
葡萄城控件
2018/01/10
4.2K0
Asp.Net MVC4入门指南(5):从控制器访问数据模型
ASP.NET MVC编程——模型
1 ViewModel 是一种专门提供给View使用的模型,使用ViewModel的理由是实体或领域模型所包含的属性比View使用的多或少,这种情况下实体或领域模型不适合View使用。 2模型绑定 默认模型绑定器 通过DefaultModelBinder解析客户端传来的数据,为控制器的操作参数列表赋值。 显示模型绑定 使用UpdateModel和TryUpdateModel显示绑定模型,不会检验未绑定字段。 使用UpdateModel方法绑定模型时,如果绑定失败就会抛异常,而TryUpdateModel不会
甜橙很酸
2018/03/30
2.4K0
ASP.NET MVC路由扩展:链接和URL的生成
ASP.NET 路由系统通过注册的路由表旨在实现两个“方向”的路有功能,即针对入栈请求的路由和出栈URL的生成。前者通过调用代表全局路由表的RouteCollection对象的GetRouteData方法实现,后者则依赖于RouteCollection的GetVirtualPathData方法,而最终还是落在继承自RouteBase的路由对象的同名方法的调用上。为了编程的方面,ASP.NET MVC为了设计了HtmlHelper和UrlHelper这两个帮助类,我们可以通过调用它们的ActionLink/R
蒋金楠
2018/01/15
1.7K0
ASP.NET MVC路由扩展:链接和URL的生成
ASP.NET MVC学习笔记04数据传递
上一篇的末尾讲到了,在了解模型之前,先来看看ASP.NET MVC是如何将数据从控制器传递给视图的。 ---- 简单梳理一下: 控制器想要请求的URL,控制器类是给您写代码来处理传入请求的地方,并从数据 库中检索数据,并最终决定什么类型的返回结果会发送回浏览器。视图模板可以被控制器 用来产生格式化过的HTML从而返回给浏览器. 控制器负责给任何数据或者对象提供一个必需的视图模板,用这个视图模板来Render返回给浏览器的HTML。 最理想的模式下:一个视图模板应该永远不会执行业务逻辑或者直接和数据
李郑
2018/03/01
2.4K0
ASP.NET MVC学习笔记04数据传递
ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
在本节中,您将验证电影控制器生成的编辑方法(Edit action methods)和视图。但是首先将修改点代码,使得发布日期属性(ReleaseDate)看上去更好。打开Models \ Movie.cs文件,并添加高亮行如下所示: using System; using System.ComponentModel.DataAnnotations; using System.Data.Entity; namespace MvcMovie.Models { public class Movie
葡萄城控件
2018/01/10
6.7K0
ASP.NET MVC 5 - 验证编辑方法(Edit method)和编辑视图(Edit view)
ASP.NET MVC 重点教程一周年版 第九回 HtmlHelper
由前篇我们所讲的Helper演化,我们思考,对于这种代码我们是不是也可以用一个Helper来自动绑定数据呢
重典
2022/04/11
8570
一步一步学Linq to sql(三):增删查改
  今天主要是来学习一下,通过Linq如何进行数据库的操作,增加、删除、修改。准备工作,先是建立了一个Asp.Net Mvc 3.0的Web项目,
aehyok
2018/09/11
9300
一步一步学Linq to sql(三):增删查改
ASP.NET MVC5高级编程——(3)MVC模式的模型
前面两篇文章我们分别讲了MVC下的视图和控制器,这章我们要讲模型(model),这章由于涉及到基架的使用,还有对模型绑定后数据库相关知识,可能会 很抽象,慢慢来吧,↖(^ω^)↗!在这之前可以先看看老师上课提的几个问题,相信看完了,你就对MVC中的模型有了个初步的了解了!
浩Coding
2019/07/03
4.8K0
ASP.NET 5系列教程 (三):view components介绍
在ASP.NET MVC 6中,view components (VCs) 功能类似于虚拟视图,但是功能更加强大。 VCs兼顾了视图和控制器的优点,你可以把VCs 看作一个Mini 控制器。它负责控制应用中的某一功能模块,例如: 动态导航菜单 标签云 登录面板 购物车 最近文章 博客侧边栏 假如使用VC 创建了登录面板,可以在很多场景中调用,例如: 用户没有登录 用户已登录,需要退出使用其他帐号登录或者管理其他帐号。 如果当前登录角色为管理员,渲染管理员登录面板 你可以根据用户的需求获取数据进行渲染。添加V
葡萄城控件
2018/01/10
1.7K0
ASP.NET 5系列教程 (三):view components介绍
了解ASP.NET MVC几种ActionResult的本质:HttpStatusCodeResult & RedirectResult/RedirectToRouteResult
在本系列的最后一篇,我们来讨论最后三个ActionResult:HttpStatusCodeResult、RedirectResult和RedirectToRouteResult 。第一个用于实现针对
蒋金楠
2018/01/15
1.2K0

相似问题

如何在asp.net剃刀中将routeValues传递给Html.ActionLink

15

Html.ActionLink与RouteValues的结合

23

Html.ActionLink错误地获取当前的RouteValues

13

ASP.NET MVC视图模型故障

32

ASP.net MVC RouteLink和可选的routeValues

21
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文