2011-04-11 15 views
11

MVC yeni kullanıcı sorusu;MVC: "Gönder" düğmesini tıkladığınızda hangi kod çağrılır?

<input type="submit" value="Save" /> 
: Ben bir "Düzenle" oluştururken görüyorum

otomatik oluşturulmuş görünümü bir "Gönder" butonuna içerdiğini görmek :) ... Manuel uğraşırken ziyade okunması öğreniyorum

Ancak, bunu kaydetmek için sahnelerin arkasında hangi kodlar çağrılır? Özellikle, bu görünümün altında yatan model, aramak istediğim kodda kendi fantezi kaydetme mantığına sahiptir. Sahnelerin arkasına görünmez olarak adlandırılan standart kodlar yerine benim kodumu çağırmak için görünümü nasıl alabilirim?

+2

El kitabını okumak waaaay daha hızlı olacak :) Nerddinner öğretici mvc ile kendinize gitmek için harika. – raklos

cevap

5

Denetleyicinizde form eyleminin işaret ettiği herkese açık eylem yöntemini çağırır. Daha sonra görünüm modelinde kaydetmeyi arayabilirsiniz.

public virtual ActionResult Save(MyViewModel model) { 
     model.Save();    

     --- more code to do stuff here 
    } 

Ayrıca, belirli bir denetleyici üzerinde belirli bir eylem yöntemine formu işaret etmek kodunuzda using (Html.BeginForm... kullanabilirsiniz MyController/Save

için form eylemi ayarlayın.

Hesap kontrol oturum açma eylemi, bu formda çağrılır
<form action="/Account/LogOn" id="loginForm" method="post"> 

3

bu örneğin kalıp elemanının aksiyon bölümünde tanımlanan Eylem yöntemini çağırdığında FormTag'ı oluşturacak şekilde üstte Metot using (Html.BeginForm(). Bu yöntem, ActionName ve controller Name alan bir aşırı yüklenmeye sahiptir. Böylece, kontrolörünüzde aranması gereken eylemi belirtebilirsiniz. Gönder düğmesini tıklattığınızda, istek, ilgili denetleyici eylemine yönlendiren HTTp Modülüne gönderilir.

0

ViewPage bir BeginForm var

+1

Doğru değil, şu anda görüntülediğiniz aynı yöntemin yayınlanma eylemini çağırır. – Jimmy

+0

@Jimmy: Düzeltme için teşekkürler. Görüşü çağrıştıran yöntem için herhangi bir işlem yapılmazsa, hangi eylem çağrılır? – Novice

+0

Eğer 'giriş' eylem formundaysanız, varsayılan olarak aynı eyleme gönderilecek, böylece 'login' eyleme giriş yapacaktır, bu formun – Jimmy

5

düzenleme görünümü şablondan oluşturulduğunda formun sonrası adresi/home/düzenlemek ziyaret ediyorsanız size formun açılış etiketinin

<form method="post" action="/home/edit"> 

başka bir eylemi olabilir aşağıdaki html görebilirsiniz düzenleme formu ie aynıdır sadece

[HttpPost] 
public ActionResult Edit(int id, ViewModel model) 
{ 
     //put your logic here handling submitted values 
} 

gibi yazılan isteklerini kabul yöntem HttpPost nitelik formu değil düğmesivar

11

işlemek için kullanılan işlem istendi almak yerine sadece sonrası isteği yerine edeceğini söyler de para cezası ne olur, ancak formun kendisi. Gönderme düğmesi (form başına bir) düğmesi, formun kendisi tarafından işlenen form gönderimini tetikler.

<form name="input" action="users/save" method="post"> 
    <!-- Form content goes here --> 
    <input type="submit" value="Submit" /> 
</form> 

eylem bir URL ve ne olur tarayıcı formu (<input...>) tüm alanların değerlerini toplar ve belirtilen gönderilen onları: örn -

bir form bir işlem bulunur url.

ASP.NET'te MVC formları genellikle Html yardımcıları kullanılarak tanımlanır, böylece form eyleminin URL'sinin oluşturulması ASP.NET MVC'ye devredilir.Örneğin yeni sürümler için: Bu durumda bir url /users/save ve formu yaratacak

<% using(Html.BeginForm("Save", "Users")) %> 
<% { %> 
    <!-- Form content goes here --> 
    <input type="submit" value="Save" /> 
<% } %> 

o url yayınlayacağız. Bu, /users/save URL'sini işleyecek ve parçaları "Kullanıcıları" denetleyici sınıfında "Kaydet" eylem yöntemini çağırması gerektiğini bilecek şekilde parçalara ayıracak ASP.NET yönlendirmesini tetikleyecektir. Daha sonra gelen tüm alan adı-değer çiftlerini okuyacak ve eğer varsa, metod parametre isimlerine eşleştirmeye çalışacaktır.

+0

Html.BeginForm() parametresi yoksa ne olur? Varsayılan davranış nedir? Akım denetleyici ve indeks ?? – KirstieBallance

+0

Evet. Hiçbir parametresi olmayan BeginForm, mevcut URL'ye bir HTTP POST gönderir. Bakınız: http://stackoverflow.com/a/16744311/381082 – DeveloperDan

İlgili konular