Сохранение ввода формы пользователя в модель и отображение в виде («Ссылка на объект не установлена ​​для экземпляра объекта») - PullRequest
0 голосов
/ 16 сентября 2018

Edit;

Совместное использование кода, как он выглядит после некоторых изменений, так же как с правильными именами переменных и т. Д.

Итак, у меня есть форма ввода, которая выглядит следующим образом:

@model InluppEtt.Models.UserInfo

@using (Html.BeginForm("Hello", "Second", FormMethod.Post))
{
    @Html.LabelFor(m => m.Name)
    @Html.TextBoxFor(m => m.Name)

    @Html.LabelFor(m => m.Age)
    @Html.TextBoxFor(m => m.Age)

    @Html.LabelFor(m => m.Location)
    @Html.TextBoxFor(m => m.Location)

    <input type="submit" value="Send" />
}

@Html.DisplayName(Model.DisplayInfo)

Предполагается, что будет опубликовано это действие:

    [HttpPost]
    public ActionResult Hello(UserInfo userInfo)
    {
        var ui = new UserInfo()
        {
            Name = userInfo.Name,
            Age = userInfo.Age,
            Location = userInfo.Location
        };

        ViewBag.Message = "Success";
        return View("Hello", ui);
    }

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

public class UserInfo
{
    public String Name { get; set; }
    public String Age { get; set; }
    public String Location { get; set; }

    public String DisplayInfo
    {
        get
        {
            return "Name: " + Name + " Age: "
                + Age + " Location: " + Location;
        }

    }
}

Я пытаюсь показать данные под формой в представлении, но когда я захожу на эту страницу, первое, что я получаю, это «Ссылка на объект, не установленная для экземпляра объекта».ошибка в

@Html.DisplayName(Model.DisplayInfo)

Спасибо

Ответы [ 2 ]

0 голосов
/ 18 сентября 2018

Да, потому что вы (DefaultModelBinder) обращаетесь к объекту, не инициализируя его в GET-запросе вашего представления. Я надеюсь, что в вашем [httpget] ActionMethod нет экземпляра объекта. Сначала вам нужно создать экземпляр, а затем перейти к вашему запросу на получение ActionMethod, и это покажет пустую строку (какие типы значений инициализированы по умолчанию).

[HttpGet]
public ActionResult Hello(UserInfo userInfo)
{
    var ui = new UserInfo();
    return View("Hello", ui);
}
0 голосов
/ 16 сентября 2018

Редактировать
просмотр:

@model Test.Models.UserInfo
@{
    ViewBag.Title = "Hello";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@using (Html.BeginForm("Hello", "Test"))
{
    @Html.LabelFor(m => m.Name)
    @Html.TextBoxFor(m => m.Name)

    @Html.LabelFor(m => m.Age)
    @Html.TextBoxFor(m => m.Age)

    @Html.LabelFor(m => m.Location)
    @Html.TextBoxFor(m => m.Location)

    <input type="submit" value="Send" />
}

@ViewBag.Message
<br />
@Html.DisplayName(Model.DisplayInfo)    

контроллер:

using System;
using System.Web.Mvc;
using Test.Models;

namespace Test.Controllers
{
    public class TestController : Controller
    {
        public ActionResult Hello(UserInfo userInfo)
        {
            if (!String.IsNullOrEmpty(userInfo.Name))
                ViewBag.Message = "Success";
            return View(userInfo);
        }
    }
}  

модель:

using System;

namespace Test.Models
{
    public class UserInfo
    {
        public String Name { get; set; }
        public String Age { get; set; }
        public String Location { get; set; }

        public String DisplayInfo => "Name: " + Name + " Age: " + Age + " Location: " + Location;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...