Mendapatkan kesalahan di sini:
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
Bagaimana cara mengizinkan pilihan nilai saja? yaitu
[ValidateInput(false)]
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
ValueProviderResult value = bindingContext.ValueProvider.GetValue("ConfirmationMessage");
ValueProviderResult value2 = bindingContext.ValueProvider.GetValue("ConfirmationMessage2");
}
Jawaban:
Anda punya beberapa pilihan.
Pada model, tambahkan atribut ini ke setiap properti yang Anda perlukan untuk mengizinkan HTML - pilihan terbaik
Pada tindakan pengontrol, tambahkan atribut ini untuk mengizinkan semua HTML
Brute force di web.config - sangat tidak direkomendasikan
Di file web.config, di dalam tag, masukkan elemen httpRuntime dengan atribut requestValidationMode = "2.0". Tambahkan juga atribut validateRequest = "false" di elemen halaman.
Info lebih lanjut: http://davidhayden.com/blog/dave/archive/2011/01/16/AllowHtmlAttributeASPNETMVC3.aspx
Di atas bekerja untuk penggunaan modelbinder default.
ModelBinder Kustom
Tampaknya panggilan ke bindingContext.ValueProvider.GetValue () dalam kode di atas selalu memvalidasi data, apa pun atributnya. Menggali ke dalam sumber ASP.NET MVC mengungkapkan bahwa DefaultModelBinder pertama memeriksa apakah validasi permintaan diperlukan dan kemudian memanggil metode bindingContext.UnvalidatedValueProvider.GetValue () dengan parameter yang menunjukkan apakah validasi diperlukan atau tidak.
Sayangnya kami tidak dapat menggunakan kode kerangka kerja apa pun karena tersegel, pribadi, atau apa pun untuk melindungi pengembang yang tidak tahu dari melakukan hal-hal berbahaya, tetapi tidak terlalu sulit untuk membuat pengikat model khusus yang berfungsi yang menghormati atribut AllowHtml dan ValidateInput:
Bagian lain yang diperlukan adalah cara untuk mengambil nilai yang tidak divalidasi. Dalam contoh ini kami menggunakan metode ekstensi untuk kelas ModelBindingContext:
Info lebih lanjut tentang ini di http://blogs.taiga.nl/martijn/2011/09/29/custom-model-binders-and-request-validation/
sumber
Mencoba:
sumber
var re = request.Unvalidated.Form["ConfirmationMessage"];
Memperluas jawaban dari @DW, di pengontrol Edit saya, dalam mengulang nilai formulir, saya harus mengganti semua contoh
Request.Params.AllKeys
denganRequest.Unvalidated.Form.AllKeys
dan semua contohRequest[key]
denganRequest.Unvalidated.Form[key]
.Ini adalah satu-satunya solusi yang berhasil untuk saya.
sumber
Seperti yang ditulis Mike Godin, meskipun Anda menyetel atribut [ValidateInput (false)], Anda harus menggunakan Request.Unvalidated.Form alih-alih Request.Form. Ini berfungsi untuk saya dengan ASP.NET MVC 5
sumber
Berikut langkah-langkah untuk menyandikan di tingkat klien dan mendekodekannya di tingkat server:
Posting formulir menggunakan metode submit jquery.
Di jquery klik tombol event method encode field yang ingin Anda posting ke server. Contoh:
Di Tingkat Pengontrol, akses semua nilai id formulir menggunakan
Contoh contoh:
Tingkat pengontrol:
Tingkat klien:
Dalam fungsi Document Ready:
sumber