Связанный объект никогда не будет нулевым - PullRequest
4 голосов
/ 25 ноября 2011

Например, есть некоторый объект, который будет моделью для строго типизированного представления:

class SomeModel {
    public string SomeUsualField { get; set; }
}

Далее, в контроллере существует некоторое действие, которое будет работать с указанным выше объектом:

public ActionResult Index(SomeModel obj)
{ 
    return View(obj);
}

Итак, вопрос в том, почему obj не является null, в то время как Index действие вызывается первым? Создан новый экземпляр класса SomeModel с нулевым значением SomeUsualField.

1 Ответ

2 голосов
/ 25 ноября 2011

Инфраструктура привязки модели ASP.NET MVC пытается заполнить все свойства данными, поступающими из объекта запроса (строка запроса, поля формы, ...). Поэтому он создает экземпляр всех параметров контроллера, чтобы попытаться сопоставить свойства. Поскольку вы не передаете SomeUsualField, он имеет значение null, но у объекта параметра есть пустой экземпляр.

Вы можете инициализировать свойство SomeUsualField при вызове http://localhost/MySite/MyController/Index?SomeUsualField=test. Свойство SomeUsualField будет автоматически инициализировано с помощью 'test'

Если вы не хотите, чтобы параметр был установлен, вы можете оставить его и выполнить второе действие с атрибутом [HttpPost]. Хороший учебник - музыкальный магазин .

public ActionResult Index() 
{  
    var obj = new SomeModel();
    return View(obj); 
} 

[HttpPost]
public ActionResult Index(SomeModel obj) 
{  
    // update logic
    return View(obj); 
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...