Ошибка сервера в приложении '/' в приложении MVC 5 - PullRequest
0 голосов
/ 06 декабря 2018

В настоящее время я изучаю MVC 5, просматривая видеоуроки.Я создал один простой клиентский контроллер с двумя методами действия, т. Е. (AddCustomer и Submit).Здесь я создал одно простое представление для AddCustomer и строго типизированное представление для отображения данных клиентов.Когда я запускаю приложение, оно показывает мне экран ввода данных о клиенте, но когда я нажимаю кнопку «Отправить», я получаю ошибку ниже.Подскажите, пожалуйста, в чем проблема в приведенном ниже коде?

Server Error in '/' Application.

The resource cannot be found. 
Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable.  Please review the following URL and make sure that it is spelled correctly. 

Requested URL: /Submit

Вот мой код контроллера клиента: -

public class CustomerController : Controller
    {
        // GET: Customer
        public ActionResult AddCustomer()
        {
            return View();
        }

        public ActionResult Submit(Customer objcust)
        {            
            objcust.CustomerID = Request.Form["txtcustid"];
            objcust.CustomerName = Request.Form["txtcustname"];
            return View("ShowCustData", objcust);
        }
    }

Вот мой вид ShowCustData: -

@model DataAnnotationsEx.Models.Customer

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>ShowCustData</title>
</head>
<body>
    <div>
        Customer ID: @Model.CustomerID <br />
        Customer Name: @Model.CustomerName
    </div>
</body>
</html>

Вот мой вид AddCustomer: -

@{
    Layout = null;
}

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>AddCustomer</title>
</head>
<body>
    <div>
        <form action="Submit" method="post">            
            Customer ID: <input id="Text1" type="text" name="txtcustid" /><br />
            Customer Name: <input id="Text1" type="text" name="txtcustname" /><br />
            <input id="Submit1" type="submit" value="submit" />
        </form>
    </div>
</body>
</html>

Вот мой клиент Модель: -

public class Customer
    {
        [Required]
        [StringLength(7)]
        [RegularExpression("^[A-Z]{3,3}[0-9]{4,4}$")]
        public string CustomerID { get; set; }

        [Required]
        [StringLength(10)]
        public string CustomerName { get; set; }
    }

Вот мой Route.config: -

 public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");


            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}",
                defaults: new { controller = "Customer", action = "AddCustomer", id = UrlParameter.Optional }
            );
        }

1 Ответ

0 голосов
/ 06 декабря 2018

Проблема в том, что у вашего действия контроллера Submit нет атрибута [HttpPost], где ваш метод формы определен как POST.Вы должны добавить упомянутый атрибут в соответствующий метод действия:

[HttpPost]
public ActionResult Submit(Customer objcust)
{            
    objcust.CustomerID = objcust.CustomerID;
    objcust.CustomerName = objcust.CustomerName;

    return View("ShowCustData", objcust);
}

Обратите внимание, что по умолчанию, если атрибут [HttpPost] не указан, он автоматически устанавливается как метод GET, следовательно, метод действия никогда не будет достигнут запросом отправки формы..

Затем вы должны заменить тег <form> помощником Html.BeginForm() со строго типизированным определением модели представления следующим образом:

@model Customer

@using (Html.BeginForm("Submit", "Customer", FormMethod.Post))
{
    @Html.LabelFor(model => model.CustomerID)
    @Html.TextBoxFor(model => model.CustomerID)

    @Html.LabelFor(model => model.CustomerName)
    @Html.TextBoxFor(model => model.CustomerName)

    <input id="Submit1" type="submit" value="submit" />
}

При использовании класса строго типизированной модели представления текстовые поляпривязывается автоматически к свойствам представления модели и может получать значения во время отправки формы.

...