C#MVC:使用可选的ViewModel查看(数据并不总是存在/必要)

时间:2009-06-05 21:06:53

标签: c# asp.net-mvc model-view-controller

我有点陷入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)。

谢谢:)

2 个答案:

答案 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) %>