2015-01-27 2 views
0

Я новичок в ASP.NET MVC. Я пытаюсь обновить модель нажатием кнопки без успеха: каждый раз, когда я нажимаю кнопку, вызывается метод контроллера HttpGet.Обновление и модель ASP.NET MVC при нажатии кнопки

Вот мой разметки

@model DataInterface.Model.Entry 

<button onclick="location.href='@Url.Action("Survey")'">Finish survey</button> 

Вот код контроллера

[HttpGet] 
public ActionResult Survey() 
{ 
    var entry = new Entry(); 
    return View(entry); 
} 

[HttpPost] 
public ActionResult Survey(Entry newEntry) 
{ 
     // save newEntry to database 
} 

При нажатии кнопки HttpGet метод вызывается. Зачем?


Это плохо быть новичком) Спасибо всем!

+0

ну, это именно то, что вы говорите обозревателю. При нажатии кнопки URL-адрес браузера изменяется, чтобы указать на метод 'Survey' в вашем контроллере. Браузер отправит запрос на получение и обработает ответ. Самый простой способ отправить запрос «POST» - это отправить форму. – WeSt

ответ

1

Если доступ к URL без явного указания HTTP method, ASP.NET MVC будет предполагать GET запрос. Чтобы изменить это, вы можете добавить форму и отправить ее:

@using (Html.BeginForm("Survey", "Controller", FormMethod.Post)) 
{ 
    <input type="submit" value="Finish survey" />  
} 

Если вы сделаете это, ваш метод POST будет вызван. Однако параметр Entry будет пустым, так как вы не укажете никаких значений для отправки вместе с запросом. Самый простой способ сделать это - указать поля ввода, например. текстовые входы, выпадающий, флажки и т.д.

@using (Html.BeginForm("Survey", "Controller", FormMethod.Post)) 
{ 
    @Html.TextBoxFor(m => m.Title) 
    <input type="submit" value="Finish survey" />  
} 

Если у вас есть объект, хранящийся на сервере где-то и только хотите, чтобы закончить его, написав его в базу данных или изменения его статуса, вы могли бы передать Id из объект (или некоторый временный идентификатор) по запросу почты и сделать метод контроллера работать только с Идентификатором:

@using (Html.BeginForm("Survey", "Controller", FormMethod.Post)) 
{ 
    @Html.HiddenFor(m => m.Id) 
    <input type="submit" value="Finish survey" />  
} 

[HttpPost] 
public ActionResult Survey(Entry newEntry) 
{ 
    // newEntry.Id will be set here 
} 
+0

Замечание: поскольку представление было сгенерировано методом 'Survey()', то все, что вам нужно, это '@using (Html.BeginForm()) {...' - его необходимо только включить параметры, если вы хотите переопределить значения по умолчанию –

0
@using (Html.BeginForm("Survey", "<ControllerName>", FormMethod.Post)) 
    { 
     <input type="submit" value="Finish survey" />  
    } 
0

вы должны объявить форму

@model DataInterface.Model.Entry 
@using (Html.BeginForm("action", "Controlleur", FormMethod.Post, new {@class = "form", id = "RequestForm" })) 
{ 
<input type="submit" value="Finish survey" /> 
} 
Смежные вопросы