【发布时间】:2010-02-11 04:37:21
【问题描述】:
在我的 ASP.NET MVC2 应用程序中,我有一个名为 UserCreateViewModel 的 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)
返回的 viewModel 不包含 OpenIdClaimedIdentifier 和 OpenIdFriendlyIdentifier 的值。
我已经调查了[HiddenInput] 属性的使用,但我似乎无法完成这项工作。我也尝试过在表单中使用隐藏的<input/> 标签,这很有效,但这似乎有点笨拙。
有没有更好的方法来做到这一点?还是使用隐藏的<input> 是唯一的方法?
编辑:澄清逻辑流程:
- 用户尝试使用他们的 OpenId 登录。
- DotNetOpenAuth 执行身份验证,如果成功,则返回
OpenIdClaimedIdentifier和OpenIdFriendlyIdentifier。 - 我进行数据库检查以查看是否已有具有此 ID 的用户。
- 如果还没有用户,则创建一个临时的
UserCreateViewModel并设置两个 OpenId 字段。这存储在TempData。 - 重定向到 UserController Create 操作并显示带有这个部分完成的
UserCreateViewModel对象的 Create 视图。 -
这就是问题所在然后用户完成其他数据(DisplayName 等)并发布结果
UserCreateViewModel。
问题在于,在第 5 步和第 6 步之间,如果未绑定 OpenId 参数,它们就会丢失。我不想在创建表单期间向用户显示OpenIdClaimedIdentifier 或OpenIdFriendlyIdentifier,但如果我删除数据,它们的绑定会在帖子中丢失。
我希望这能稍微澄清一下这个问题
【问题讨论】:
-
你在创建中,如果没有设置空值是不是很正常?你想要什么,空字符串?
-
这不是我的意思,我已经重新澄清了这个问题。
-
您是否有不想使用隐藏字段的原因?它可以帮助我们更好地回答您的问题。在您修改后,我已经更新了我的答案。
标签: c# .net asp.net-mvc viewmodel