这是我 Controller 的代码片段

[HttpPost]
public ActionResult Cancel(string id,FormCollection collection)
{
   //This is how I would like to declare appt but I cannot seem to correctly pass id into this method
   //var appt = Application.Session.GetObjectFromOid<Appointment>(new ObjectId(id));

   //I am trying to do it this way instead but I get an error
   var appt = (Appointment)Application.Appointments.Where(a=>a.Id.Equals(collection["Id"]));
   .....
}

这是我得到的错误:无法将类型为“WhereListIterator`1 [Web.Model.Appointment]”的对象强制转换为“Web.Model.Appointment”。

这是我的看法:
<input type="button" value="Save" onclick="updateCancel(); return false;" /><button>Save</button>

这是我的职责
 function updateCancel() {
    $('#cancel').ajaxSubmit({

    });
    }

那么,为什么我会收到此错误?
或者有没有一种方法可以将Model.Data.Id传递到我的函数中,以便我可以只使用id来代替?

最佳答案

Where子句返回一个迭代器。选择您要使用的内容。也就是说,如果您只希望得到一个结果,则可以使用FirstOrDefault。您还可以使用索引,例如[1]

var appt = (Appointment)Application.Appointments.Where
     (a=>a.Id.Equals(collection["Id"]))
     .FirstOrDefault();

请注意,当找不到该项目时,FirstOrDefault返回null,因此请务必检查结果值。

PS:您可能不需要那里的 Actor 。如果没有(Appointment,则由于标题错误,这应该可以正常工作,因为列表中的项目类型为Appointment

10-08 17:28