1

Название этого сообщения - мое лучшее предположение о том, что здесь происходит. Объяснение:Значение привязки к модели при обратной передаче

На нашей индексной странице находится список агентов, которые были введены в нашу систему. Агенты могут быть введены в нашу систему более одного раза, если они регистрируются для продажи для нескольких компаний. Чтобы упростить процесс ввода данных, мы создали функцию «Клонировать».

Функция «Клон» работает только с агентами, которые были введены полностью в нашу систему. Перейдя на страницу индекса, найдя агента в статусе «Завершить» и нажав ссылку «Клонировать», наш сайт скопирует определенный набор полей и откроет страницу Create.cshtml с этими автоматически заполненными полями.

enter image description here

При нажатии на "Clone" ссылку, сайт переходит в CreateGET контроллера. PK агента, которого мы клонируем, существует в URL-адресе, и мы используем его в методе контроллера GET, чтобы вытащить нужные нам поля.

Мы создаем новый объект модели AgentTransmission, а затем разместим его для просмотра. На данный момент объект модели имеет значение PK0 (мы используем автоматически назначенное целое для этого поля).

enter image description here

Активизировав через код Razor, я могу видеть, что модель сообщения в представлении с 0 значение еще там для PK поля.

enter image description here

Когда вы нажмете «Сохранить», однако, модель объект сообщение к методу CreatePOST контроллера с PK значения не из 0, но с PK исходного агента клонированием из.

enter image description here

Так как контроллер, в методе CreateGET, посылает объект модели в представление с PK значением 0 и, путем активизации через код Бритва, можно видеть, что Model, что в настоящее время рендеринга в представлении все еще имеет значение PK0, единственное место, где я могу видеть исходное значение PK агента, это URL.

enter image description here

URL-адрес, содержащийся в "Клон" ссылка форматируется так:

{controller}/{action}/{PK} 

Это URL, который, естественно, появляется, когда страница Create.cshtml визуализируется. Поэтому мой вопрос заключается в следующем:

Есть ли способ предотвратить значение PK, которое появляется в URL-адресе, от привязки к объекту модели, отправленного обратно в контроллер POST?

Если нет, могу ли я изменить URL-адрес при возврате с контроллера GET?

EDIT

Per комментарии здесь пару битов или соответствующий код

Модель

namespace MonetModelFromDb.Models 
{ 
    using System; 
    using System.Collections.Generic; 

    public partial class AgentTransmission 
    { 

     public int ID { get; set; } 

ActionLink из Index.cshtml

@Html.ActionLink("Clone", "Create", new { id = item.ID }) 

GET

// 
    // GET: /AgentTransmission/Create 
    [MonetAuthorize] 
    public ActionResult Create(int? id, long? x, string l = "", string f = "", string a = "", string agentId = "", bool secondAgent = false, string msg = "", string ReferenceNumber = "") 
    { 

POST

[HttpPost] 
    [MonetAuthorize] 
    public ActionResult Create(AgentTransmission agenttransmission, string andAddAgent = "") 
    { 
+0

Пробовал ли вы использовать альтернативное имя свойства на вашей модели просмотра, чтобы предотвратить двусмысленность в привязке? Трудно понять, что на самом деле происходит из описательной прозы и множества скриншотов - код был бы более полезен. –

+0

Поймите, не уверен, какой код показывать. Что было бы полезно? – NealR

+0

Модель представления (исключаемые свойства), действия GET и POST и соответствующие части представления. Затем мы можем проследить поток программы, чтобы определить, что связано с ней. –

ответ

0

Измененный параметр из id в cloneFromId и это работало. Как упоминалось в комментариях, это было вызвано двусмысленностью между полем PKID и параметром id, передаваемым в URL-адресе.

Смежные вопросы