0

说我有一个动作方法......

public ActionResult DisplayXml(int viewId, Dictionary<string,string> parameter, string dataFormat )
        {
            string xml = "";
            return Content(xml, "text/xml");
        }

在我看来我做到了.......

<iframe title="Xml" class="ResultDisplay" 
        src = "@Url.Action("DisplayXml", "OutputData", new {viewId = Model.ViewId, parameter = Model.Parameter, dataFormat = Model.DataFormat })">
</iframe>

这里的参数是一个字典,我得到空值。怎么发啊??????

4

1 回答 1

2

您正在尝试将任意字典作为查询字符串中的参数传递?

需要将字典的内容序列化为查询字符串参数并再次返回,这是一个非常不寻常的要求。生成查询字符串参数时,MVC 将只对值调用 .ToString() ,而 Dictionary<,> 对象只使用默认实现(返回它的类型)

由于此要求非常罕见,因此没有任何内置功能可以执行此操作。您可以很容易地将自己的字典序列化为字符串(可能是 json?),然后将操作中的参数变量更改为字符串。之后,您必须将值反序列化回字典。

在我提供更多示例之前,我想检查您是否绝对确定这是您想要做的

更新:

这是这样做的方法(需要 json.net):

    public ActionResult DisplayXml(int viewId, string parameterJson, string dataFormat )
    {
        var parameter = JsonConvert.DeserializeObject<Dictionary<string,string>>(parameterJson);

        string xml = "";
        return Content(xml, "text/xml");
    }

并使用:

<iframe title="Xml" class="ResultDisplay" 
        src = "@Url.Action("DisplayXml", "OutputData", new {viewId = Model.ViewId, parameterJson = Newtonsoft.Json.JsonConvert.SerializeObject(Model.Parameter), dataFormat = Model.DataFormat })">
</iframe>
于 2013-05-15T06:41:21.343 回答