如何使用MVC3将对象从“索引”视图传递到编辑视图

时间:2011-11-17 13:33:25

标签: asp.net-mvc-3

我创建了一个由MVC3 UI配置的简单WCF服务。

当我从控制器调用索引页面时,我想显示配置中保存的值,该值已由服务返回。然后,用户可以选择编辑这些设置,然后将其发送回服务。

我想在索引视图中执行类似的操作...

<div>
    @Html.ActionLink("Edit", "Edit", model)
</div>

然后像这样使用控制器中的模型......

[HttpPost]
    public ActionResult Edit( SettingsModel Config)
    {
        try
        {
            List<string> configErrors = null;

            if (ModelState.IsValid)
            {
                // Set up a channel factory to use the webHTTPBinding
                using (WebChannelFactory<IChangeService> serviceChannel = new WebChannelFactory<IChangeService>(new Uri(baseServiceUrl)))
                {
                    IChangeService channel = serviceChannel.CreateChannel();
                    configErrors = channel.SetSysConfig(Config);
                }
          }
            return RedirectToAction("Index");
        }
        catch
        {
            return View();
        }
    }

但这不起作用。

任何建议???

2 个答案:

答案 0 :(得分:1)

发布表单后,将收集所有输入类型字段数据并将其发送到服务器。您可以使用FireBug查看此数据。这里的关键点是,是在表单中发布的数据,MVC的默认模型绑定器可以理解并将其映射到模型对象,模型对象作为输入参数传递给action方法。

在您的情况下,模型的类型为“SettingsModel”。您必须确保正在发布的表单数据采用格式,可以映射到“SettingsModel”对象。

在另一个帖子中讨论了同样的问题:Can't figure out why model is null on postback?

查看此文章:NerdDinner Step 6: ViewData and ViewModel

在上面的文章中,请仔细阅读“使用ViewModel模式”部分。我的猜测是,这就是你要找的东西。

答案 1 :(得分:0)

您需要发布值以在Edit操作上填充SettingsModel对象。如果您不希望用户看到它,您可以使用隐藏的表单字段执行此操作。否则,您可以在“编辑”操作上没有参数,并再次调用Web服务以填充“设置”模型。