ASP.NETMVC-TroublePassingModelsinHtml.ActionLinkrouteValues我的观点是这样的:"C#"Inherits="System.Web.Mvc.ViewUserControl"%>我的控制器操作:publicActionResultSortDetails(SearchDataTypeModelmodel,StringsortBy){模型参数为空。sortBy参数已填充。我可以毫无问题地将String属性从模型传递到操作。我想通过整个模型。任何想法我做错了什么?另一种选择是将所需数据保存在TempData中。这会将它交给下一个请求,您可以在其中检索它。如果需要,您应该能够保留整个模型对象。但正如Darin所建议的那样,从数据库中再次检索它更容易(也更好)。您不能传递复杂对象:new{model=Model,sortBy="EffectiveStartDate",},model=Model没有意义,不能使用GET发送。您可能需要使用带有编辑器模板和/或隐藏字段的表单来发送所有模型属性。请记住,查询字符串中只能发送标量值(key1=value1&key2=value2...)。想到的另一个选择是只发送ID:new{modelId=Model.Id,sortBy="EffectiveStartDate",},然后在您的控制器操作中从数据存储中获取给定此ID的模型:publicActionResultSortDetails(intmodelId,字符串sortBy){varmodel=repository.GetModel(modelId);...}当然,只有当用户不应该在表单中编辑模型属性时,这才是正确的。取决于你的场景。为了完整起见,让我公开另一种选择:使用MVCFutures的Html.Serialize帮助程序将整个模型序列化为隐藏字段,可以将其传递回控制器操作并在那里反序列化。还有另一种方法可以专门将模型或复杂对象作为ActionLinks中的RouteValues传递。模型:在类中创建静态序列化和反序列化方法publicclassXYZ{//SomeFieldspublicstringX{get;放;}公共字符串Y{得到;放;}公共字符串X{得到;放;}//这会将传递的XYZ对象转换为JSON字符串publicstaticstringSerialize(XYZxyz){varserializer=newJavaScriptSerializer();返回serializer.Serialize(xyz);}//这会将传递的JSON字符串转换回XYZ对象publicstaticXYZDeserialize(stringdata){varserializer=newJavaScriptSerializer();返回序列化程序。反序列化(数据);}}VIEW:现在将复杂对象转换为JSON字符串并将其传递到ActionViewCONTROLLER:在Action方法中将对象作为字符串获取,并在使用之前将其转换回对象publicActionResultSomeAction(stringmodelString){XYXxyz=XYX.Deserialize(modelString);就是这样......注意:其他答案中讨论的技术适用于模型以下就足够了,但有时你需要将一些复杂的对象(除了数据库模型)传递回控制器,因为我有这个具体案例。希望这可以帮助...?您必须序列化该对象。网址会变得丑陋,而且会变得很长。这有点接近你想要的。我使用仅保存在控制器中的自定义参数。只是易于维护,它们是功能强大的类型。我不喜欢引号中的变量。如果我在提交表单时使用这些,那么一切都很好。如果我使用Html.ActionLink则它不起作用。基本上,Url是否必须看起来像这样?catid.Value=31f1a21a-9546-4f2f-8c26-a0273d11b233解决方法很简单,因为我还记得怎么手动写html的A标签。">publicActionResultIndex(Core.ControllerPersistence._Guidcatid){if(catid.Value.HasValue){并不是所有的Html助手都像一支笔,你可以放在口袋里自动签名,这样你就不必移动你的手腕...如果由于某种原因,某天笔无法工作,只需拿起一支普通笔并移动你的手腕,这样你就可以签名并继续前进。杰夫,也许你可以创建一个视图类,然后将其传递给视图.单击操作链接时,仅传递Model.SearchDataTypeModel。HTH可能为时已晚。有一些解决方案。类似的东西。这是我的示例。url生成代码:varrv=newRouteValueDictionary();rv["sortBy"]=currentSortColumn;rv["ascending"]=currentSortColumn==sortBy?升序:真;rv["filter.Id"]=//一些值rv["filter.Creator"]=//一些值varurl=url.Action(//urlisUrlHelperactionName,controllerName,rv);//结果它会输出如下内容://http://your_host/yourController/yourAction?sortBy=name&ascending=True&filter.Id=100&filter.Creator=testControllercode:publicActionResultYourAction(stringsortBy="name",boolascending=false,YourFilterModelfilter=null)Filterobjectclass:以上是C#学习教程:ASP.NETMVC-Html.ActionLinkrouteValues中传递模型的麻烦所有分享的内容,如果对大家有用还有需要了解更多C#学习教程,希望大家多多关注——publicclassYourFilterModel{publicstringId{get;放;}publicstringCreator{get;放;}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
