Проверка MVC (MVC3): модель существует или имеет значения - PullRequest
0 голосов
/ 27 августа 2011

Я создал рабочий DropDownListFor, который получает данные из списка выбора, который представляет собой Model.IssueSocialSec, а затем устанавливает значение из базы данных: Model.SocialDBValue

Однако, когда я щелкаю ссылку «Изменить», которая с запросом к репозиторию, передающему модель обратно на страницу, это работает, но если я делаю необходимый маршрут перенаправления на страницу и ничего не связывает модель, то страница выходит из строя. Я попытаюсь передать ей пустую модель, но я решил опубликовать ее, так как всегда хотел бы услышать отзывы о «лучших практиках» и извлеченных уроках.

 @Html.DropDownListFor(m => m.SelectedSocial, new SelectList(Model.IssueSocialSec, "Value", "Text", Model.SocialDBValue), "") 

Ответы [ 2 ]

1 голос
/ 27 августа 2011

Похоже, вам просто нужно обернуть DropDownListFor в <form> URL-адресом, указывающим на действие, которое позволит вам редактировать. Форма может использовать запрос GET, если это идемпотентная операция, и вы можете использовать JavaScript для отправки формы при изменении значения <select>, возвращаясь к отображению кнопки для отправки, когда JavaScript отключен.

Как правило, я структурирую контроллеры MVC и выполняю действия как таковые

public class ProfilesController : Controller
{
    public IProfileRepository Profiles { get; private set; }

    public ProfilesController(IProfilesRepository profiles)
    {
        Profiles = profiles;
    }

    [HttpGet]
    public ActionResult Index()
    {
        var profiles = Profiles.All();

        return View(new ProfilesModel { Profiles = profiles });
    }

    [HttpGet]
    public ActionResult Edit(int id)
    {
        var profile = Profiles.GetById(id);

        return View(new ProfileModel { Profile = profile });
    }

    [HttpPost]
    public ActionResult Edit(ProfileModel model)
    {
        if (!ModelState.IsValid)
        {
            return View(model);
        }

        var profile = Profiles.GetById(id);       

        // update the profile 
        Mapper.Map(model, profile);

        if (Profiles.Update(profile))
        {
            TempData["message"] = "Profile updated successfully";
        }

        return RedirectToAction("Edit");
    }
}

Index отобразит все профили. На каждом профиле будет отображаться <a> с URL-адресом, указывающим на Edit, а URL-адрес будет включать id для профиля для редактирования. Edit просмотр опубликует форму на Edit, а профиль будет обновлен с изменениями модели.

Я рекомендую взглянуть на что-то вроде NerdDinner или Музыкальный магазин MVC , чтобы понять, как они структурируют свой код.

0 голосов
/ 27 августа 2011

Я все исправил так:

    ChildInfoModel childviewmodel = new ChildInfoModel();
    return View(childviewmodel);

прежде чем я пытался просто сделать: return View()

...