在我的ASP.NET MVC2应用程序中,我有一个名为UserCreateViewModel的ViewModel类。编辑视图中的不可编辑的ViewModel属性
在这个类中,有许多属性直接映射到名为User的LINQ-to-SQL类。我使用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)
返回的视图模型不包含OpenIdClaimedIdentifier
和OpenIdFriendlyIdentifier
值。
我调查了[HiddenInput]
属性的使用,但我似乎无法完成此项工作。我也曾尝试在表单中使用隐藏的<input/>
标记,该标记有效,但这看起来有点笨拙。
有没有更好的方法来做到这一点?或者正在使用隐藏的<input>
唯一的方法?
编辑:为了澄清逻辑流程:
- 用户尝试使用其OpenID登录。
- DotNetOpenAuth执行身份验证,如果成功,则返回
OpenIdClaimedIdentifier
和OpenIdFriendlyIdentifier
。 - 我做了一个数据库检查,看看是否已经有一个用户与这个Id。
- 如果还没有用户,则创建一个临时设置为
UserCreateViewModel
的OpenId字段。这存储在TempData
。 - 重定向到UserController创建操作并显示带有部分完成的
UserCreateViewModel
对象的“创建”视图。 - 这一点是问题用户然后完成其他数据(显示名称等),并张贴结果
UserCreateViewModel
。
问题是在步骤5和步骤6之间,如果OpenId参数未绑定,则会丢失OpenId参数。我不想在创建表单中显示用户OpenIdClaimedIdentifier
或OpenIdFriendlyIdentifier
,但是如果我删除了数据,则他们的绑定在帖子上丢失。
我希望这个澄清一点
你在一个创建,如果没有设置它有空值是不是正常的?你想要什么,空弦? – 2010-02-11 04:49:11
这不完全是我的意思,我已经重新澄清了这个问题。 – 2010-02-11 11:05:08
有没有你不想使用隐藏字段的原因?它可以帮助我们更好地回答你的问题。编辑完成后,我已更新了我的答案。 – 2010-02-15 15:15:49