我有点陷入MVC问题。
我有一个注册视图,请访问www.example.com/register,如下所示:
<form id="registrationform" method="post">
<fieldset>
<label for="emailaddress">Email</label>
<input id="emailaddress" name="emailaddress" type="text" />
//more inputs etc.
</fieldset>
</form>
<form id="registrationform" method="post">
<fieldset>
<label for="emailaddress">Email</label>
<input id="emailaddress" name="emailaddress" type="text" />
//more inputs etc.
</fieldset>
</form>
现在我允许其他人邀请其他人,所以我在我的控制器的Register方法中检查一个邀请参数(www.example.com/register?invite=1234)。如果invite参数不为空,我在数据库中进行查找以获取关联的“邀请”用户。一切正常。
现在出现问题:我想用数据库中的数据预填充输入。我已经有了数据,我只是不知道将它放入MVC视图的最佳方法,并禁用现在已经填充的输入。
视图模型?请记住,我需要定期清空视图(我不想使用不同的视图,这会违反DRY)。
谢谢:)
答案 0 :(得分:3)
我建议您创建一个ViewModel,并让您的视图完全不知道数据是否已从数据库中预填充的事实。
如果您正在预先填充数据..然后用必要的数据填充您的ViewModel(并禁用预先填充的输入)
如果您从头开始..然后用空/默认数据填充您的ViewModel
无论哪种方式,您的所有视图都会显示表单,并根据传入的ViewModel在各种文本框和其他输入上填充默认数据。
答案 1 :(得分:2)
在您的视图模型中:
public class RegistrationViewModel
{
public bool Invited;
/*
* Fields for prepopulating inputs
*/
}
在您的视图中:
<%= Html.TextBox("email", null, Model.Invited ? new { @readonly = "readonly"} : null) %>
或
<%= Html.TextBox("email", null, Model.Invited ? new { @disabled = "disabled"} : null) %>