Вы пытаетесь сериализовать целый сложный объект здесь:
onclick="location.href='@Url.Action("Transaction","User", new Transaction { Company = o,Individual = (Individual)Model})'"
Из комментария на вопрос выше, это просто запись строкового представления каждого свойства:
location.href='/User/Transaction?Individual=System.Data.Entity.DynamicProxies.Individual_38FCAB5A9CFA20BF79D8EDBDD997A0CA040A96BD2C33DAB33CB4A343BE8BDF7B&Company=System.Data.Entity.DynamicProxies.Company_5BF87B6217AD9FE8C136ECD77D64A8AE5DC9669791BB1FEA512FD500FE1CCFE4'
Сделайте шаг назад ... Зачем вам нужен весь объект здесь? Рассмотрим это концептуально на мгновение. Сервер строит весь этот объект, отправляя весь этот объект клиенту, только чтобы клиент отправил весь этот объект без изменений пользователем обратно на сервер. (Или, по крайней мере, намерение состоит в том, чтобы пользователь не изменял его. Что происходит, когда пользователь изменяет его ? Будет ли сервер доверять всему этому объекту при отправке назад?)
В конечном итоге ... Почему? Нет необходимости отправлять весь объект клиенту только для того, чтобы отправить весь объект обратно на сервер. Все, что нужно серверу, - это достаточно информации для повторного извлечения объекта из данных. Идентификатор некоторого вида. В базе данных это обычно поле первичного ключа.
(Примечание. Пользователь по-прежнему может изменять идентификатор. Убедитесь, что вы проверяете, что информация, поступающая от клиента, действительна для текущего вошедшего в систему пользователя.)
Так какие идентификаторы вам нужны? Похоже, вы ищете только Company
и Individual
. Предположим для примера, что у них обоих есть свойство с именем ID
, которое является единственным значением для идентификации этих записей в ваших данных. Тогда все, что вам нужно, - это идентификаторы:
onclick="location.href='@Url.Action("Transaction","User", new { companyID = o.ID, individualID = ((Individual)Model).ID }'"
Это сделает ссылку более похожей на:
location.href='/User/Transaction?companyID=123&individualID=234'
В действии на стороне сервера вы ожидаете только эти значения:
public ActionResult Transaction(int companyID, int individualID)
{
// Fetch the records to build your Transaction object
}
Кроме того, стоит также отметить, что ваше действие в настоящее время повторно сериализует весь объект и снова отправляет его клиенту в форме перенаправления. Похоже, что здесь происходит несколько уровней косвенного обращения, и вы пытаетесь передать весь объект назад и вперед между сервером и клиентом несколько раз. Это определенно не нужно.
Сохраняйте минимальные данные между сервером и клиентом, передавайте только необходимые значения. Сервер может восстанавливать объекты из данных быстрее и надежнее, чем сеть может передавать целые объекты несколько раз, и при этом код будет проще.