Задание типа параметра позже и соблюдение соглашения об именовании MVC - PullRequest
0 голосов
/ 20 декабря 2011

Я нахожусь в ситуации, когда я хочу определить тип параметра внутри метода. Но если я сделаю что-то вроде этого:

    public class UserModel
    {
        public string InputName { get; set; }
    }

    [HttpPost]
    public ActionResult Index(object obj)
    {
        UserModel test = obj as UserModel;
        ViewBag.Test = test.InputName;

        return View();
    }

Соглашение об именах, которое должно быть в моем obj при публикации формы, не имеет места? Я думаю. Я хочу сделать это, потому что тип obj находится в другом месте. Можно ли это как-то сделать? Нужно ли что-то перезаписывать?

Редактировать: - Еще один способ решения моей проблемы.

Когда вы публикуете форму в веб-приложении MVC. Вы получаете данные, объявляя тип параметра в вашем ActionResult. И здесь происходит соглашение об именах, верно? Но что, если я не знаю тип параметра сразу? Как я могу объявить тип параметра позже в методе ActionResult и получить соглашение о присвоении имен там?

Надеюсь, это имеет смысл, и извините за мой английский!


Спасибо за ваши предложения! Я нашел другой способ подойти к моей проблеме. И теперь я застрял здесь вместо этого:)

Просмотр строки с другого контроллера

Ответы [ 2 ]

1 голос
/ 21 декабря 2011
[HttpPost]
     public ActionResult Index(object obj)   
     {    
         UserModel test = new UserModel();
         TryUpdateModel(test);  
         ViewBag.Test = test.InputName;     
             return View();     
      } 

Попробуйте вот так.

0 голосов
/ 20 декабря 2011

Вы оказываете себе медвежью услугу, используя MVC, а не , используя строго типизированные параметры действий. Если у вас есть модели для вашего действия Index, которые являются непересекающимися, вам, вероятно, следует использовать несколько контроллеров, каждый со своим собственным действием Index. Как минимум, это должны быть отдельные действия в одном контроллере. Возможно, вы могли бы обработать решение вызвать конкретное действие на стороне клиента:

<script type="text/javascript">
    $(function() {
        $('#myButton').click(function(e) {
            var url = "User/Index";
            data = { InputName: 'username' };
            if(someCondition) {
                url = "User/AnotherAction";
                data = { SomeOtherModelField: 'someOtherValue' };
            }

            $.ajax({
                url: url,
                type: 'POST',
                data: data,
                success: function(e) {
                    alert('post succeeded');
                }
            });
        });
    });
</script>

И ваш контроллер может выглядеть так:

public class UserController : Controller
{
    [HttpPost]
    public ActionResult Index(UserModel model)
    {
        // do UserModel stuff
        return View();
    }

    [HttpPost]
    public ActionResult AnotherAction(SomeOtherModel model)
    {
        // do SomeOtherModel stuff
        return View();
    }
}
...