2015-08-27 2 views
0

Я работаю над приложением MVC6, и я бы хотел, чтобы кнопка отправила модель представления в контроллер. У меня есть следующий код, используя taghelper -MVC6 Taghelper Post Model to Controller

<a asp-route-area="MyArea" asp-controller="MyController" asp-action="MyAction">Save</a> 

Вот моя модель декларация в представлении -

@model MyObject 

Вот мой контроллер действия -

public IActionResult MyAction(MyObject mo) 
{    
    return new EmptyResult(); 
} 

При нажатии на кнопку , он правильно перенаправляется контроллеру, но объект модели равен нулю. Как мне вернуть всю модель обратно на контроллер при нажатии кнопки?

FYI - моя цель здесь состоит в том, чтобы иметь несколько кнопок на форме, которая выведет модель вида на другой контроллер mvc на основе кнопки, нажатой.

РЕДАКТИРОВАТЬ - мне не обязательно нужно отправлять его в разные контроллеры/действия. Я смог просто позволить контроллеру решить, как обрабатывать, и это, похоже, выполняет то, что мне нужно.

+0

Если вы хотите разместить сообщение, вам необходимо использовать форму и кнопку или тип ввода = отправить, а свойства модели должны соответствовать элементам внутри формы. тег link/anchor просто собирается сделать запрос на получение без представленной модели, он ничего не собирается публиковать, это всего лишь ссылка –

+0

, если вы хотите сделать форму, которая отправляет сообщения другому контроллеру/действию с помощью разных кнопок, тогда вам нужно будет добавить несколько javascript для нажатия кнопки, чтобы изменить действие формы, а затем отправить форму. –

+0

Я закончил процесс, упомянутый здесь. Https://visualstudiomagazine.com/articles/2014/11/01/performing-multiple-actions.aspx – czuroski

ответ

0

Я закончил с использованием решения, изложенного here. По существу, как это работает, вы создаете две кнопки с разными именами и имеете контроллер, который принимает параметр с именами кнопок. Затем я просто проверяю эти параметры и, если они имеют значение, я обрабатываю таким образом.

+1

Вы упомянули, что хотите опубликовать ViewModel в * другом * контроллере mvc на основе при нажатии кнопки. Статья, о которой вы упомянули, помещает ViewModel в * тот же * ActionResult того же * Контроллера. Затем внутри этого ActionResult у вас есть логика, которая проверяет, какая кнопка была нажата. Это то, что вы действительно хотите? В противном случае, как отметил @Joe Audette, изменение атрибута * action * тега формы - путь. – Vlince

+0

На самом деле мне нужно выполнить различную обработку на основе щелчка. Я изначально собирался выполнить это с помощью разных контроллеров/действий, но теперь я могу просто позвонить в один контроллер и выполнить нужную мне работу. Я также мог просто перенаправить одно действие контроллера на требуемый контроллер. – czuroski

0

Вы можете использовать HTML-форм действия на кнопку

что-то вроде:

<form action="/submitNormal" method="get"> 
    First name: <input type="text" name="fname"><br> 
    Last name: <input type="text" name="lname"><br> 
    <button type="submit">Submit normal</button><br> 
    <button type="submit" formaction="="/submitDifferent">Submit different</button> 
</form> 

не уверен насчет поддержки браузера.

+0

Это будет работать для получения действия, но мне нужно выполнить пост. – czuroski

+0

Изменить метод "post" –