İşte senaryoda. BuHTML uzantısını kullanan değer, iki modelin aynı ada sahip bir özelliğe sahip olması durumunda olması gerekenden farklıysa,
@model MvcApplication2.Models.SimpleModel1
@{
ViewBag.Title = "Home Page";
}
@using (Html.BeginForm("Test", "Home", FormMethod.Post))
{
<label>Enter something here</label>
@Html.TextBoxFor(m => m.Property1)
<button type="submit">Submit</button>
}
gibi görünen bir görünüm döndüren bir ortak özellik adı (örneğin Index için) Eylem SimpleModel1 Kullanılan
public class SimpleModel1
{
// Some Properties
public string Property1 { get; set; }
}
public class SimpleModel2
{
// Some Properties
public string Property1 { get; set; } // Same name as Property1 in SimpleModel1
}
sahip
düzenlendi iki Modeller Değeri, SimpleModel1 parametresini parametre olarak alan bir Test eylemine gönderir, bazıları çalışır ve SimpleModel2
'te görünen bir görünümü döndürürpublic ActionResult Test(SimpleModel1 model) { SimpleModel2 newModel = new SimpleModel2(); // Do Something newModel.Property1 = "Something different than model's Property1"; return View(newModel); }
Test.cshtml (görünüm Testi eylem tarafından döndürülen) aşağıdaki gibidir:
@model MvcApplication2.Models.SimpleModel2 @{ ViewBag.Title = "Test"; } <h2>Test</h2> @* Model Propery without using HTML extension*@ @Model.Property1 @* Model property using HTML extension (Incorrect) *@ @Html.TextBoxFor(m => m.Property1) @Html.HiddenFor(m => m.Property1) @Html.TextAreaFor(m => m.Property1) @* Correct Value *@ <input value="@Model.Property1" />
Ne bekliyoruz özellik1 tüm değerler "Modelin özellik1 farklı bir şey olacağıdır "Test Eyleminde ayarlandığı gibi. Ancak, Html uzantısını kullananların (Html.TextBoxFor, Html.HiddenFor vb.), Test Eylemine gönderilen Property1 değerine sahip olduğu ortaya çıkıyor. Örneğin, "Ne sürpriz" (SimpleModel1'in Property1'i) 'i Test Eylemine gönderirsem, SimpleModel2'nin Property1'inin değeri de ne ayarladığımdan bağımsız olarak "Ne sürpriz" olur.
Neler olup bittiği hakkında hiçbir fikrim yok. Bana bir böcek gibi görünüyor. Herhangi bir fikri olan var mı?
Bu işe yaradı ama neden html uzantısı yöntemleriyle ilgili bir sorun? @ Model.Property1, doğru değeri nasıl gösterir? –
Dahili html uzantısı yöntemleri, özelliğin değerini belirlemek için ModelState'deki değere bakar. Bu sadece nasıl yazıldığını. Neden böyle yazıldığını anlatamam. Umarım başka biri olabilir. Ben de bilmek isterdim. – Dmitry
@Dmitry Bir ViewModel almak yerine, birden çok parametreyi tek tek ele geçirdiyseniz veya değerleri almak için form koleksiyonunu kullandıysanız, ardından bir POST üzerinde başarısız bir doğrulama ile, yemek yapısını parçalamak zorunda kalmazsınız. yeni bir viewmodel ve form öğelerinden tüm çeşitli özellikleri ayarlayın, çünkü form ModelState'den otomatik olarak doldurulur. Geriye kalanlarımız için POST parametresinde bir ViewModel kullanarak ModelState'in görünüm Modeli üzerinde öncelik kazanması bir sıkıntı haline gelir. – AaronLS