Контроллер MVC вернул параметр как нулевой для сложного типа данных - PullRequest
1 голос
/ 05 июля 2011
public class FileSubmissionModel
{
    public List<DraftFile> ValidFiles{ get ; set ;  }
    public List<DraftFile> InvalidFiles{ get ; set ;  }
}

Где:

public class DraftFile
{

    public Guid DraftId { get ; set ;  }
    public string OriginalFileName { get ; set ;  }
}

Дает ноль на:

[HttpPost]
public ActionResult Step2(FileSubmissionModel validFiles)
{
 ...
}

Параметр 'validFiles.ValidFiles' & 'validFiles.InvalidFiles' возвращается как ноль. Кто-нибудь знает, почему и что я могу сделать, чтобы это исправить? Ура, Пит

Просмотр кода в соответствии с запросом ... Я кое-что выхватил, но вы поняли суть:

@foreach (var item in Model.InvalidFiles)
        {
        count++;
        <tr>
            @Html.HiddenFor(model => model.InvalidFiles[count].DraftId) 
            @Html.HiddenFor(model => model.InvalidFiles[count].OriginalFileName ) 
        </tr>
        }

1 Ответ

1 голос
/ 05 июля 2011

Похоже, проблема заключается в том, что параметр метода Step2 validFiles совпадает со свойством ValidFiles в FileSubmissionModel .

Предполагая, что в представлении вы делаете что-то вроде:

@for(var i = 0; i < 10; i++)
{
 <p>  @Html.EditorFor(model => model.ValidFiles[i].DraftId)</p>
}

Имя поля будет сгенерировано как ValidFiles [0] .DraftId , что и отправляется обратно на сервер.

Связыватель модели по умолчанию пытается связать с параметром, а не со свойством модели, потому что имена совпадают, и связыватель модели по умолчанию сопоставляется без учета регистра.

Мой совет прямо сейчас состоит в том, чтобы изменить имя параметра в вашем методе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...