ฉันจะส่งข้อมูลที่ปิดใช้งานใน ASP.NET MVC ได้อย่างไร
ฉันจะส่งข้อมูลที่ปิดใช้งานใน ASP.NET MVC ได้อย่างไร
คำตอบ:
คุณไม่สามารถสร้างสนามreadonly="readonly"
แทนได้disabled="disabled"
หรือไม่? ค่าฟิลด์แบบอ่านอย่างเดียวจะถูกส่งไปยังเซิร์ฟเวอร์ในขณะที่ผู้ใช้ยังไม่สามารถแก้ไขได้ SELECT
แท็กเป็นข้อยกเว้นว่า
<%: Html.TextBoxFor(model => model.p1, new { @readonly = "readonly" }) %>
ฉันจะทำให้สีเทาออกมาเป็นสีเทาได้อย่างไรเพื่อให้ดูเหมือนว่าแก้ไขไม่ได้ ยังดีกว่าเราสามารถใช้สิ่งที่คล้ายกับ LabelFor ได้ฉันลอง LabelFor แต่ได้รับ DisplayName เท่านั้น ....
type="checkbox"
อินพุตเช่นกัน
ขอบคุณทุกคน:
วิธีที่ฉันแก้ไขสิ่งนี้:
document.getElementById("Costo").readOnly = true;
document.getElementById("Costo").style.color = "#c0c0c0";
บันทึก:
ฉันได้รับข้อมูลเกี่ยวกับคำตอบนี้ แต่ได้รับการแก้ไขแล้ว
textBox.Attributes.Add("readonly", "readonly");
และคำอธิบายอยู่ในลิงค์
$("#textBoxId").css("color", "#c0c0c0")
บรรทัดที่สองกลายเป็น
@ppumkin กล่าวถึงนี้ในความคิดเห็นของเขาในคำตอบนี้แต่ฉันต้องการที่จะเน้นว่ามันเป็นผมก็ไม่สามารถหาแหล่งข้อมูลอื่น ๆ <select>
เกี่ยวกับการส่งข้อมูลจากคนพิการ ฉันยังเชื่อว่ามันเกี่ยวข้องกับคำถามเนื่องจากสิ่งที่เลือกไม่ใช่<input>
s แต่เป็น "อินพุต"
เพียงรวมฟิลด์ที่ซ่อนไว้สำหรับผู้พิการเลือกและจัดเรียงทั้งหมด
ตัวอย่าง:
@Html.DropDownListFor(model => model.SelectedID, ... , new { disabled = "disabled"}) @* Won't be posted back *@
@Html.HiddenFor(model => model.SelectedID) @* Will be posted back *@
ข้อควรระวัง:สิ่งนี้จะทำให้สองแท็กในหน้าที่มี ID เดียวกันซึ่งไม่ใช่ HTML ที่ถูกต้องจริงๆและอาจทำให้ปวดหัวกับจาวาสคริปต์ สำหรับฉันฉันมี javascript เพื่อตั้งค่าของดรอปดาวน์ด้วย html id
และถ้าคุณใส่ฟิลด์ที่ซ่อนไว้ก่อนจาวาสคริปต์จะพบว่าแทนที่จะเป็นไฟล์select
.
โดยปกติถ้าฉันมีฟิลด์ที่เป็น "อ่านอย่างเดียว" แต่จำเป็นต้องส่งกลับไปที่เซิร์ฟเวอร์ฉันจะทำให้การแสดงผลถูกปิดใช้งาน (หรือเพียงแค่ข้อความ) แต่จะเพิ่มฟิลด์ที่ซ่อนด้วยชื่อเดียวกัน คุณยังคงต้องตรวจสอบให้แน่ใจว่าฟิลด์นั้นไม่ได้ถูกแก้ไขจริงบนฝั่งเซิร์ฟเวอร์ - เพียงแค่อย่าอัปเดตจากโมเดลในการดำเนินการของคุณ - แต่สถานะของโมเดลจะยังคงถูกต้องหากมีข้อผิดพลาด
คุณยังสามารถใช้รหัสเช่นนี้ก่อนที่จะส่งแบบฟอร์ม:
$(":disabled", $('#frmMain')).removeAttr("disabled");
Ajax.BeginForm
?
โดยเบราว์เซอร์การออกแบบไม่รองรับสิ่งนั้น
สร้างสิ่งเหล่านี้readonly
ซึ่งอนุญาตให้ส่งค่าไปยังเซิร์ฟเวอร์หรือหากคุณกำลังจัดการกับการควบคุมที่ยังใช้งานได้กับreadonly
แอตทริบิวต์เช่นเลือกเพิ่มรูปแบบ css pointer-events: none;
เพื่อทำให้ไม่โต้ตอบ
แบบแฮ็ค แต่ได้ผล! นอกจากนี้ยังใช้งานได้เมื่อคุณส่งแบบฟอร์มโดยตรงด้วยปุ่มส่งโดยไม่ต้องใช้จาวาสคริปต์ ไม่ต้องทำงานพิเศษ!
เช่น:
<select asp-for="TypeId"
asp-items="@(new SelectList(await TypeRepository.FetchTypesAsync(), "TypeId", "Name"))"
class="form-control form-control-sm"
readonly
style="pointer-events: none;">
</select>
คุณสามารถสร้างเทมเพลตตัวแก้ไขได้ดังตัวอย่างด้านล่าง
CSS
.disabled {
background-color:lightgray;
}
เทมเพลตบรรณาธิการ
@model string
@Html.TextBoxFor(x => x,new {@class="disabled", @readonly=true })
เมื่อเราจัดการกับปิดใช้งาน แต่เลือกช่องทำเครื่องหมายและเราต้องการโพสต์ค่าเราต้องตรวจสอบให้แน่ใจว่าฟิลด์ที่ซ่อนอยู่ของเราปรากฏก่อนฟิลด์ @ Html.CheckBoxFor hidden
ต่อไปนี้เป็นลิงค์ที่ฉันพบคำตอบ http://davecallan.com/posting-disabled-checkboxes-mvc-razor-views/#comment-11033
ขยาย Tasos '(": disabled", $ (' # xxxForm ')). removeAttr ("disabled"); คุณสามารถใช้ได้:
$("#xxxForm").submit(function (e) {
e.preventDefault();
var form = this;
$('#Field1')[0].disabled = false;
$('#Field2')[0].disabled = false;
...
$('#FieldN')[0].disabled = false;
form.submit(); // submit bypassing the jQuery bound event
});
สิ่งนี้จะช่วยในการส่งค่าโมเดลใน ASP.net:
$("#iD").attr("style", "pointer-events: none;background-color:rgb(220,220,220)");
ฉันมักจะใช้วิธีนี้สำหรับ CheckBox หรือ CheckBoxFor เพราะการปิดใช้งานจะทำให้สูญเสียค่า อ่านอย่างเดียวใช้ไม่ได้กับช่องทำเครื่องหมาย
@Html.DisplayFor(m => m.Order.Transfer)
@Html.HiddenFor(m => m.Order.Transfer)
เพียงใส่สคริปต์นี้ใน @section scripts ในเพจของคุณ สิ่งนี้จะเปิดใช้งานอินพุตเมื่อคุณส่งเพจและคุณควรเปลี่ยนเส้นทางผู้ใช้ไปยังเพจอื่นหลังจากส่ง
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.0/jquery.min.js">
$("form").submit(function () {
if ($('form').valid()) {
$("input").removeAttr("disabled");
}
});
</script>
เพียงแค่ทำให้คุณสมบัตินั้น [จำเป็น] ใน ViewModel ที่เชื่อมโยงกับมุมมองนั้น