<= Tilbake

Lage Action for å ta imot skjema

For å sende inn data må vi først ha en metode som kan ta det imot. Vi oppretter en ny ActionPersonController som vi kaller Create. Ettersom det er vanlig å bruke POST som http-metode for når man sender inn data markerer vi metoden med [HttpPost].

[HttpPost]
public ActionResult Create(PersonModel model)
{
	return View("Show", model);
}
Vi tar inn et objekt av typen PersonModel som argument. For å vise hva vi får inn bruker vi et View vi allerede har: Show.cshtml.

Lage skjema

For å lage skjemaet har vi en ny samling med Html-hjelpere. Vi setter også modellen til Index til å være av typen PersonModel. Index.cshtml:

@model MVCintro.Models.PersonModel

@{
    ViewBag.Title = "Index";
}

<h2>Index</h2>

@Html.ActionLink("Link 1", "Show", new { @id = 13 }, new { @class="pull-right", id = "iden-til-linken" })

<a href="@Url.Action("Show", new {@id = 13})">Link 2

@using (Html.BeginForm("Create", "Person")){

	@Html.TextBoxFor(m => m.FirstName)<br/>
	@Html.TextBoxFor(m => m.LastName)<br />
	@Html.TextBoxFor(m => m.PhoneNumber)<br />

	<input type="submit" value="Send inn" />
}
Vi bygger på nytt (CTRL + F5) og vips så har vi et skjema. Når vi forsøker å sende inn får vi denne feilmeldingen: PersonModel. Siden browseren ikke kan sende C#-objekter, er det MVC-rammeverket som må opprette objektet utifra parameterene som kommer inn med POST-requesten fra skjemaet. For at det skal klare å opprette et nytt objekt må PersonModel ha en tom konstruktør. Vi går til PersonModel.cs og legger til en konstruktør:
public class PersonModel
{
	public PersonModel(int personId, string firstName, string lastName, string phoneNumber)
	{
		Id = personId;
		FirstName = firstName;
		LastName = lastName;
		PhoneNumber = phoneNumber;
	}

	public PersonModel()
	{
		
	}

	public int Id { get; set; }
	public string FirstName { get; set; }
	public string LastName { get; set; }
	public string PhoneNumber { get; set; }
}
Vi bygger på nytt, og vips får kan vi sende inn informasjon om personen som vises på Show-siden vår.

Skjemaet funker ok, men det er litt dumt at vi ikke har noen merkelapper på feltene - det er jo umulig for brukeren å vite hva feltene er til. Vi legger til labels:

@using (Html.BeginForm("Create", "Person")){

	@Html.LabelFor(m => m.FirstName) 
	@Html.TextBoxFor(m => m.FirstName)<br/>
	@Html.LabelFor(m => m.LastName) 
	@Html.TextBoxFor(m => m.LastName)<br />
	@Html.LabelFor(m => m.PhoneNumber) 
	@Html.TextBoxFor(m => m.PhoneNumber)<br />	
	
	<input type="submit" value="Send inn" />
}

Vi har nå beskrivende felter, men vi skulle ønske at de var på norsk. Vi kunne skrevet html-merkelappen selv, men det er dumt hvis vi senere vil ha de på flere språk. Vi velger derfor heller å legge på visningsnavnet på feltene i PersonModel:


        public int Id { get; set; }
        [DisplayName("Fornavn")]
        public string FirstName { get; set; }
        [DisplayName("Etternavn")]
        public string LastName { get; set; }
        [DisplayName("Telefonnummer")]
        public string PhoneNumber { get; set; }

<= Tilbake