8

我正在将通过查询字符串Folder.Id.UniqueId从查询中检索到的文件夹的属性传递到另一个页面。FindFolders在第二页上,我想用它UniqueId来绑定到文件夹以列出其邮件项目:

string parentFolderId = Request.QueryString["id"];
...
Folder parentFolder = Folder.Bind(exchangeService, parentFolderId);
// do something with parent folder

当我运行此代码时,它会抛出一个异常,告诉我 Id 格式错误。我想也许它需要被包裹在一个FolderId对象中:

Folder parentFolder = Folder.Bind(exchangeService, new FolderId(parentFolderId));

同样的问题。

我一直在寻找一段时间,并找到了一些关于 Base64/UTF8 转换的建议,但同样没有解决问题。

任何人都知道如何绑定到具有给定唯一 ID 的文件夹?

4

3 回答 3

7

我遇到了类似的问题,并使用了 urlencode/urldecode 来确保 id 的格式正确。然而,其中一位用户的消息会导致错误。

事实证明,一些 id 中有一个 + 号,导致解码时出现一个 ' ' 空格。一个简单的 ' ' 替换 '+' 就可以了。

可能是问题所在。

我知道这个问题是很久以前提出的,但这可能对其未来的其他人有所帮助。

于 2010-10-27T20:55:32.870 回答
0

parentFolderId 值是否正确形成,或者当您尝试实例化文件夹对象时它只是抛出一个摇摆不定?在将其作为查询字符串传递之前,您是否在 id 上执行了 HttpUtility.UrlEncode(不要忘记之后执行 HttpUtility.UrlDecode)

于 2010-08-31T01:14:05.387 回答
-1

您需要确保 id 已正确编码。这是一个例子。

模型:

public class FolderViewModel
{
    public string Id { get; set; }
}

控制器:

public class HomeController : Controller
{
    public ActionResult Index()
    {
        ExchangeService service = new ExchangeService();
        service.Credentials = new NetworkCredential("username", "pwd", "domain");
        service.AutodiscoverUrl("foo@company.com");

        // Get all folders in the Inbox
        IEnumerable<FolderViewModel> model = service
            .FindFolders(WellKnownFolderName.Inbox, new FolderView(int.MaxValue))
            .Select(folder => new FolderViewModel { Id = folder.Id.UniqueId });

        return View(model);
    }

    public ActionResult Bind(string id)
    {
        Folder folder = Folder.Bind(service, new FolderId(id));
        // TODO: Do something with the selected folder

        return View();
    }
}

和索引视图:

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<IEnumerable<SomeNs.Models.FolderViewModel>>" %>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<% foreach (var folder in Model) { %>
    <%: Html.ActionLink(Model.Id, "Bind", new { id = Model.Id }) %>
<% } %>

</asp:Content>
于 2010-09-04T08:06:32.510 回答