2016-08-07 3 views
-1

Итак, я создал таблицу для хранения дополнительной информации для всех пользователей, прошедших проверку подлинности. Эта таблица также ссылается на многие другие в моем db. Эта таблица привязана к идентификатору asp.net через идентификатор пользователя, хотя есть несколько полей, которые имеют одинаковую информацию, такую ​​как таблицы членства (электронная почта и имя пользователя). К сожалению, произошла ошибка, которая удалила некоторые из этих данных членства из таблицы пользователей, которую я добавил, а не самих идентификационных таблиц. Сама ошибка была исправлена, однако я пытаюсь создать способ получить эту утраченную информацию из таблиц членства. То, как я это делал, было добавлением кнопки на экран редактирования пользователей (не страница usersadmin, а таблица пользователей, которую я добавил). Мой код для кнопки, принимая меня в действии выглядит следующим образом: Кнопка действия
Button to actionActionMethod Я только что создал не удалось найти

Код UserReset Действие выглядит следующим образом: UserReset Действие Кодекса
UserReset Action Code

Проблема Я имею в настоящее время на самом деле может вызвать это действие (или даже открыть страницу редактирования в этой точке). Каждый раз, когда я пытаюсь загрузить страницу, он выдает ошибку «Открытый метод действий, не найденный в контроллере». Я чувствую, что это ошибка новобранец на моем конце, но кто-нибудь может рассказать мне, что я делаю неправильно?

+0

** Примечание: Кнопка находится внутри отдельного Html.BeginForm как остальной части страницы редактирования. Я не знаю, полезно ли это, но мне кажется, что это часть проблемы ** –

ответ

0

Я буду держать язык за зубами на предысторию и просто ответить на вопрос:

Итак, у вас есть две основные вещи, которые я нашел. Первый - это CSHTML (но не прямая причина вашей конкретной ошибки). Дальше см. Предложения CSHTML (особенно, если у вас возникли проблемы после исправлений C# Action)

Во-первых, ваш контроллер. Если вы посмотрите на свое действие UserReset, вы заметите, что вы его украсили [HttpPost]. Как вы сказали, вы не можете открыть страницу редактирования. Это связано с тем, что действие страницы редактирования не существует (например, действие [HttpGet] по запрашиваемому URL-адресу). Это то, что вам нужно:

public class TSTUsersController : IController 
{ 
    ... 
    //You need this action to process the get request 
    [HttpGet] 
    public ActionResult UserReset() 
    { 
     return View("UserReset"); //return the edit form html to the user 
    } 
    //this method will handle the button click 
    [HttpPost] 
    public ActionResult UserReset(String email) 
    { 
     if(ModelState.IsValid) 
     { 
      //save the information to the database 
      //direct the user to some sort of confirmation page 
      return RedirectToAction("Index", "Home"); 
     } 
     //return the form with the error messages 
     return View("UserReset", email); 
    } 
    ... 
} 

Из того, что я могу сказать, вы полностью недопонимаете представление HTML-формы.

<form></form> элемент имеет два основных параметра вы пропали без вести:

<form 
    method="POST" 
    action="@Url.Action("UserReset", 'TSTUsers")" //e.g. POST /TSTUsers/UserReset 
    ... > 
    ... 
    <button>Submit</button> 
</form> 

Или, используя хелперы:

@using(Html.BeginForm("UserReset", "TSTUsers", FormMethod.Post)) 
{ 
    <button>Submit</button> 
} 

Теперь это вывесит на определенные действия. Чтобы добавить параметры, в вашем случае используйте не изменяющийся параметр (например, пользователь не может ввести адрес электронной почты), поэтому у вас есть два варианта.Вы можете изменить свой параметр action вместо этого назначить параметр (обратите внимание, что пользователь увидит этот URL на не-Ajax пост, если это имеет значение для вас), вот так:

<form 
    action="@Url.Action("UserReset", 'TSTUsers", new { email = Model.Email })" 
     //e.g. POST /TSTUsers/[email protected] 
    ... > 
    ... 
    <button>Submit</button> 
</form> 

Или, используя хелперы :

@using(Html.BeginForm("UserReset", "TSTUsers", FormMethod.Post, new { email = Model.Email })) 
{ 
    <button>Submit</button> 
} 

Теперь, если вы предпочли бы, чтобы скрыть параметр Url из запроса (по любой причине), то вы бы вместо того, чтобы добавить input, с type из hidden:

<form 
    action="@Url.Action("UserReset", 'TSTUsers")" //e.g. "POST /TSTUsers/UserReset 
    ... > 
    <input type="hidden" name="email" value="@Model.Email" 
    <button>Submit</button> 
</form> 

Или, используя хелперы:

@using(Html.BeginForm("UserReset", "TSTUsers", FormMethod.Post)) 
{ 
    @Html.Hidden("email", Model.Email) 
    <button>Submit</button> 
} 
Смежные вопросы