此异常表示在未在事务中的情况下尝试修改Revit的文档或模型。
Autodesk.Revit.Exceptions.ModificationOutsideTransactionException: Modification outside transaction.
   在 Autodesk.Revit.DB.Document.GetElement(ElementId id)
   在 YourCodeNamespace.YourMethod() in YourCodeFile.cs:line XX
Revit的文档或模型是被锁定的,只有在事务中才能进行修改。如果在没有启动事务的情况下尝试进行修改,就会引发此异常。这是为了保证数据的一致性和完整性。
确保在修改文档或模型之前,已在事务内开始进行操作。这可以通过以下代码示例实现:
// 开始事务
using (Transaction t = new Transaction(doc, "Transaction Name"))
{
    t.Start();
    
    // 进行修改操作
    // ...
    // 提交事务
    t.Commit();
}
如果您正在使用外部应用程序程序集开发Revit插件,则必须在调用API之前将当前上下文切换为事务上下文。这可以通过以下代码示例实现:
// 获取当前文档
Document doc = commandData.Application.ActiveUIDocument.Document;
// 切换到事务上下文
using (TransactionGroup tg = new TransactionGroup(doc))
{
    tg.Start("Transaction Group Name");
    using (Transaction t = new Transaction(doc))
    {
        t.Start("Transaction Name");
        // 进行修改操作
        // ...
        // 提交事务
        t.Commit();
    }
    // 结束事务组
    tg.Assimilate();
}
以下示例演示如何在事务中修改Revit元素:
// 获取当前文档
Document doc = commandData.Application.ActiveUIDocument.Document;
// 获取元素ID
ElementId elementId = new ElementId(123);
// 切换到事务上下文
using (TransactionGroup tg = new TransactionGroup(doc))
{
    tg.Start("Transaction Group Name");
    using (Transaction t = new Transaction(doc))
    {
        t.Start("Transaction Name");
        // 获取元素对象
        Element element = doc.GetElement(elementId);
        // 判断元素对象是否为空
        if (element != null)
        {
            // 修改元素对象
            element.Name = "New Name";
            // 提交事务
            t.Commit();
        }
    }
    // 结束事务组
    tg.Assimilate();
}