c# – 编辑视图中的不可编辑的ViewModel属性
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 编辑视图中的不可编辑的ViewModel属性,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3030字,纯文字阅读大概需要5分钟。
内容图文
在我的ASP.NET MVC2应用程序中,我有一个名为UserCreateViewModel的ViewModel类.
在这个类中,有许多属性直接映射到LINQ-to-SQL类,称为User.我正在使用AutoMapper来执行此映射,它工作正常.
在UserController的Create操作中,我收到一个部分完整的UserCreateViewModel,其中包含有关OpenId身份验证的信息.
这是UserCreateViewModel的定义:
public class UserCreateViewModel
{
public string OpenIdClaimedIdentifier { get; set; }
public string OpenIdFriendlyIdentifier { get; set; }
public string Displayname { get; set; }
public string Email { get; set; }
public string PhoneNumber { get; set; }
}
在“创建”视图中,我不希望OpenIdClaimedIdentifier或OpenIdFriendlyIdentifier可编辑.
我使用了强类型的创建视图(使用内置的自动创建),但这为我提供了这两个属性的可编辑文本框.如果我完全删除了特定的html,当返回创建表单时(并直接返回给UserCreateViewModel):
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(UserCreateViewModel viewModel, string ReturnUrl)
返回的viewModel不包含OpenIdClaimedIdentifier和OpenIdFriendlyIdentifier的值.
我已经调查了[HiddenInput]属性的使用,但我似乎无法使其工作.我也尝试过使用隐藏的< input />形式中的标签,有效,但这看起来有点笨重.
有一个更好的方法吗?或正在使用隐藏的<输入>唯一的办法?
编辑:澄清逻辑流程:
>用户尝试使用其OpenId登录.
> DotNetOpenAuth执行身份验证,如果成功,则返回OpenIdClaimedIdentifier和OpenIdFriendlyIdentifier.
>我进行数据库检查以查看是否已有用户拥有此ID.
>如果还没有用户,则创建一个临时UserCreateViewModel,同时设置两个OpenId字段.它存储在TempData中.
>重定向到UserController创建操作并使用此部分完成的UserCreateViewModel对象显示“创建”视图.
>此位是问题用户然后完成其他数据(DisplayName等)并发布生成的UserCreateViewModel.
问题是在步骤5和6之间,如果OpenId参数没有绑定,它们就会丢失.我不想在创建表单期间显示用户OpenIdClaimedIdentifier或OpenIdFriendlyIdentifier,但如果我删除了数据,则它们的绑定会在帖子上丢失.
我希望这有点澄清这个问题
解决方法:
我不确定这是否是您正在寻找的但如果您不希望OpenIdClaimedIdentifier自动绑定,那么您可以将其添加到BindAttribute的排除列表中
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create([Bind(Exclude="OpenIdClaimedIdentifier")]UserCreateViewModel viewModel, string ReturnUrl) {
}
编辑后更新
Is there a better way to do this?
更好是一个相对的术语.当然有其他方法可以实现您想要的但隐藏的< input>字段通常用于这种情况,如你所说,工作.
<%=Html.Hidden("OpenIdClaimedIdentifier") %
您是否有任何特殊原因想要使用隐藏字段?这有助于我们更好地回答您的问题.
是因为你担心安全吗?从您描述逻辑流程的方式来看,使用隐藏的< input>在提交之前,会让您容易受到更改经过身份验证的OpenIdClaimedIdentifier和OpenIdFriendlyIdentifier隐藏值的影响.如果这是您关心的问题,那么您可以加密解析回客户端的数据.
替代解决方案是:
>将数据存储在服务器会话中.
Session [“OpenIdClaimedIdentifier”] = value;
>或者将您的流程分为两个阶段(包括2个数据库提交).更新在步骤4,当您确认OpenId身份验证后,在数据库中创建用户记录,获取创建的唯一记录ID并将其存储在身份验证cookie中(此时用户已通过身份验证).然后,您将重定向到“编辑用户详细信息”.然后,“编辑”页面从身份验证cookie中获取用户ID,以查找用户记录而不是表单.
如果您在保存数据之前执行必要的安全检查,那么我认为使用隐藏字段没有任何问题.
内容总结
以上是互联网集市为您收集整理的c# – 编辑视图中的不可编辑的ViewModel属性全部内容,希望文章能够帮你解决c# – 编辑视图中的不可编辑的ViewModel属性所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。