Viewdata error in controller

Asked

Viewed 152 times

4

What could be wrong in this example?

I can’t do it:

    var pessoa = new Pessoa
        (
           PessoaId = 1,
           Nome = "teste teste",
           twitter = "@teste"

        );

Error message:

'Name' does not exist in the Current context 'Pessoaid' does not exist in the Current context 'twitter' does not exist in the Current context

I have the Models

namespace PostGetModel.Models
{
    public class Pessoa
    {
        public int PessoaId { get; set; }
        public string  Nome { get; set; }
        public string twitter { get; set; }

    }
}

No Controller

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using PostGetModel.Models;


namespace PostGetModel.Controllers
{
    public class HomeController : Controller
    {

        public ActionResult Index()
        {
            var pessoa = new Pessoa
                (
                   pessoa.PessoaId = 1,
                   pessoa.Nome = "teste teste",
                   pessoa.twitter = "@teste"

                );

            ViewData["PessoaId"] = pessoa.PessoaId;
            ViewData["Nome"] = pessoa.Nome;
            ViewData["twitter"] = pessoa.twitter;

            return View();
        }

    }
}
  • You were not pleased to accept one of them?

3 answers

8

You can use a object initializer:

var pessoa = new Pessoa
        {
           PessoaId = 1,
           Nome = "teste teste",
           twitter = "@teste"
        };

Or create a builder for your class:

public class Pessoa {
    public Pessoa(int pessoaId, string nome, string twitter) {
        this.PessoaId = pessoaId;
        this.Nome = nome;
        this.twitter = twitter;
    }
    public int PessoaId { get; set; }
    public string  Nome { get; set; }
    public string twitter { get; set; }
}

With the constructor you can create the instance the way you were using.

I could call it that:

var pessoa = new Pessoa
    (
       pessoaId = 1,
       nome = "teste teste",
       twitter = "@teste"
    );

Or so:

var pessoa = new Pessoa(1, "teste teste", "@teste");

A functional example:

public class Program {
    public static void Main() {
        var joao = new Pessoa(1, "João da Silva", "@joao");
        var jose = new Pessoa(
           pessoaId : 1,
           nome : "José da Silva",
           twitter : "@jose"
        );
        var joaquim = new Pessoa() {
           PessoaId = 1,
           Nome = "Joaquim da Silva",
           Twitter = "@joaquim"
        };
    }
}

public class Pessoa {
    public Pessoa() {} //normalmente isto não é recomendado, fiz só para criar o terceiro exemplo
    public Pessoa(int pessoaId, string nome, string twitter) {
        PessoaId = pessoaId;
        Nome = nome;
        Twitter = twitter;
    }
    public int PessoaId { get; set; }
    public string  Nome { get; set; }
    public string Twitter { get; set; }
}

Behold working in the ideone. And in the .NET Fiddle. Also put on the Github for future reference.

5

Initializing an object’s properties is done with {}

var pessoa = new Pessoa
        {
           PessoaId = 1,
           Nome = "teste teste",
           twitter = "@teste"
        };
  • Thanks! you solved the issue, the problem was that I was using () and was {}

0

You have no constructor defined for the person class, so you should use property initializers to initialize object properties.

In your case, by putting everything within parentheses, you were trying to make assignments to variables that don’t exist, so you received this error message.

var pessoa = new Pessoa()
        {
           PessoaId = 1,
           Nome = "teste teste",
           twitter = "@teste"
        };

Browser other questions tagged

You are not signed in. Login or sign up in order to post.