返回包含填充字段的视图?

时间:2011-08-22 15:29:49

标签: asp.net-mvc asp.net-mvc-3

我将查询字符串从外部源传递给我的帐户控制器,我想将这些值添加到模型中并返回视图。下面的代码正在运行,但它返回的视图包含缺少字段的所有验证错误。我只是希望它返回填充了这些字段的视图?

另一个问题是我想在地址末尾没有查询字符串的情况下返回一个干净的URL / Account / Register吗?

// **************************************
// URL: /Account/WriteRegistration/?Number=251911083837045755&Name=All&Remote=False
// **************************************

    public ActionResult WriteRegistration(RegisterModel model, string Number, string Name, bool Remote)
    {
        model.Number = Number;

        return View("Register", model);
    }

3 个答案:

答案 0 :(得分:2)

我认为你可能正在接近这一点。

如果您使用查询字符串填充视图,请执行以下操作:

public ActionResult WriteRegistration(string Number, string Name, bool Remote)
{
    // Instantiate a new model here, then populate it with the incoming values...
    RegisterModel model = new RegisterModel() { Number = Number, Name = Name, Remote = Remote };
    return View("Register", model);
}

如果您正在寻找一个干净的URL,您可能需要考虑使用POST ...即创建表单并通过提交按钮提交。在这种情况下,你会这样做:

[HttpPost]
public ActionResult WriteRegistration(RegisterModel model)
{
    // Model binding takes care of this for you, no need to set it up yourself.
    // ...but I'm guessing you'd do some logic here first.
    return View("Register", model);
}

我认为您的原始代码混合了两种方法。

答案 1 :(得分:1)

要返回干净的网址,您需要映射路线,在Global.asax中添加RegisterRoutes顶部的以下内容:

routes.MapRoute(
    "WriteRegistration",
    "Account/WriteRegistration/{Number}/{Name}/{Remote}",
    new {controller="Account", action="WriteResistration"},
    new {productId = @"\d+" }
);

然后/Account/WriteRegistration/251911083837045755/All/False将匹配。

要将值放入视图中,请通过viewdata传递它们,并将表单字段的默认值设置为viewdata中的值。

答案 2 :(得分:-1)

我相信你可以调用ModelState.Clear()来清除ModelBinding生成的任何错误。首次加载该页面时,应该摆脱验证错误。