2015-12-16 2 views
1

Я работаю над проектом в программировании MVC asp.net на C#.Свойство становится NULL при перенаправлении на другое действие с параметром

Мой arena класс имеет 5 свойств:

public int Id { get; set; } 
public int CharacterId { get; set; } 
public int Forfeit { get; set; } 
public System.DateTime Queued { get; set; } 
public virtual Character Character { get; set; } 

Когда я модель Arena из базы данных с помощью этого:

var arenaModel = ctx.Arenas.FirstOrDefault(a => a.Character.AccountId == currentUserId); 

Ничто не является пустым, есть персонаж, идентификатор есть , неустойки и очереди. Но когда я перенаправлять на другое действие с помощью этого:

return RedirectToAction("BattleNPC", arenaModel); 

и с использованием точки останова в методе BattleNPC

public ActionResult BattleNPC(Arena model) 
{ 
    var character = model.Character; // <-- Null 
} 

Внезапно свойство для Character имеет нулевое значение, я все еще могу получить увидеть другие свойства тонких но Character стать null.

Почему? Может кто-нибудь объяснить, почему Character становится null. Я знаю, как это исправить, я просто не понимаю, почему он становится нулевым.

+0

'' Character' является null', потому что внутренне ' Метод RedirectToAction() 'генерирует значения строки запроса на основе значения' .ToString() 'каждого свойства в вашей модели. И для вашего последнего свойства это возвращает '& Character =" yourAssembly.Character "', который не может быть привязан к tyeof 'Character' –

ответ

4

RedirectToAction советует вашему браузеру перенаправить на новый URL-адрес. Модель get потеряна на этом пути, так как браузер будет выполнять только новый GET-запрос. Вы можете добавлять параметры в форме ключа. Это будет добавлено к URL-адресу

RedirectToAction('actionX', new { id = 123 }) 

Ваше действие затем выберет DataObject на основе данного идентификатора.

public ActionResult BattleNPC(int arenaId) 
{ 
    var model = var arenaModel = ctx.Arenas.FirstOrDefault(a => a.Id == arenaId); 
    var character = model.Character; // <-- Null 
} 

Или, если действие находится в том же контроллере, просто вернуться, используя вид()

см: When do you use View() vs. RedirectToAction или: Difference between redirectToAction() and View()

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