问题描述
我有一个包含 city(sehir) 和 district(il) 表的数据库。在我的注册表中,我想根据城市值获取地区数据。并且有一个地址表,其中包含这些表的外键。有一个邮政编码栏。首先,我将它设为整数值,当我这样尝试时,我的 ajax 调用工作正常,它正在动态获取所有城市和地区数据。但是当我提交表单时,我收到一条错误消息,显示“无法将类型为 'system.int32' 的对象转换为类型为 'System.String'”。我无法决定错误提到的是哪个值。我已经决定它是邮政编码,所以我已经将它的类型更改为 varchar 并在我的模型类中更新它,当我这样做时,这次我的 ajax 调用无法正常工作,问题是我的 ajax 调用有与邮政编码无关。我的代码:
地址类:
public int kullaniciID { get; set; }
public int? ulkeID { get; set; }
[required(ErrorMessage = "Şehir girmeniz gerekmektedir!")]
public int sehirID { get; set; }
[required(ErrorMessage = "İlçe girmeniz gerekmektedir!")]
public int ilceID { get; set; }
[required(ErrorMessage = "Posta kodu girmeniz gerekmektedir!")]
[StringLength(6,ErrorMessage = "Posta kodu maksimum 6 haneye sahip olabilir!")]
public string postaKodu { get; set; }
[required(ErrorMessage = "Açık adres girmeniz gerekmektedir!")]
[MinLength(30,ErrorMessage = "Açık adres en az 30 karaktere sahip olmak zorundadır")]
public string acikAdres { get; set; }
[required(ErrorMessage = "İlçe gerekli")]
public virtual tblİlce tblİlce { get; set; }
[required(ErrorMessage = "Kullanıcı gerekli")]
public virtual tblKullanici tblKullanici { get; set; }
[required(ErrorMessage = "Şehir gerekli")]
public virtual tblSehir tblSehir { get; set; }
[required(ErrorMessage = "Ülke gerekli")]
public virtual tblUlke tblUlke { get; set; }
public JsonResult IlIlce(int? ilID,string tip)
{
db = new DatabaseContext();
List<SelectListItem> sonuc = new List<SelectListItem>();
bool isSuccessful = true;
try
{
switch (tip)
{
case "ilGetir":
//veritabanımızdaki iller tablomuzdan illerimizi sonuc değişkenimze atıyoruz
foreach (var sehir in db.tblSehir.ToList())
{
sonuc.Add(new SelectListItem
{
Text = sehir.sehirAdi,Value = sehir.sehirID.ToString()
});
}
break;
case "ilceGetir":
//ilcelerimizi getireceğiz ilimizi selecten seçilen ilID sine göre
foreach (var ilce in db.tblİlce.Where(il => il.bagliOlduguSehirID == ilID).ToList())
{
sonuc.Add(new SelectListItem
{
Text = ilce.ilceAdi,Value = ilce.ilceID.ToString()
});
}
break;
default:
break;
}
}
catch (Exception)
{
//hata ile karşılaşırsak buraya düşüyor
isSuccessful = false;
sonuc = new List<SelectListItem>();
sonuc.Add(new SelectListItem
{
Text = "Bir hata oluştu :(",Value = "Default"
});
}
//Oluşturduğum sonucları json olarak geriye gönderiyorum
return Json(new { ok = isSuccessful,text = sonuc });
}
@model IWP.Models.RegisterVM
@{
ViewBag.Title = "Register";
}
<h2>Kayıt Formu</h2>
<hr />
@if (ViewBag.Message != null)
{
<span class="alert alert-danger">@ViewBag.Messsage</span>
}
@using (Html.BeginForm("Register","User",FormMethod.Post,new { @class = "w-100 d-flex justify-content-center" }))
{
@Html.AntiForgeryToken()
<div class="form-horizontal p-5 m-3 w-50 d-flex flex-column align-items-center">
@Html.ValidationSummary(true,"",new { @class = "text-danger" })
<div class="form-group w-100">
<label class="form-control-label col-md-12">Kullanıcı adı</label>
<div class="col-md-12">
@Html.EditorFor(model => model.User.kullaniciAdi,new { htmlAttributes = new { @class = "form-control",@required = "required" } })
@Html.ValidationMessageFor(model => model.User.kullaniciAdi,new { @class = "text-danger" })
</div>
</div>
<div class="form-group w-100">
<label class="form-control-label col-md-12">Firma adı</label>
<div class="col-md-12">
@Html.EditorFor(model => model.User.firmaAdi,@required = "required" } })
@Html.ValidationMessageFor(model => model.User.firmaAdi,new { @class = "text-danger" })
</div>
</div>
<div class="form-group w-100">
<label class="form-control-label col-md-12">Şifre</label>
<div class="col-md-12">
@Html.EditorFor(model => model.User.sifre,@required = "required",@type = "password" } })
@Html.ValidationMessageFor(model => model.User.sifre,new { @class = "text-danger" })
</div>
</div>
<div class="form-group w-100">
<label class="form-control-label col-md-12">Şifre tekrar</label>
<div class="col-md-12">
@Html.EditorFor(model => model.User.sifreTekrar,new { @class = "text-danger" })
</div>
</div>
<div class="form-group w-100">
<label class="form-control-label col-md-12">E-mail</label>
<div class="col-md-12">
@Html.EditorFor(model => model.User.mail,@type = "text" } })
@Html.ValidationMessageFor(model => model.User.mail,new { @class = "text-danger" })
</div>
</div>
<div class="form-group w-100">
<label class="form-control-label col-md-12">Telefon</label>
<div class="col-md-12">
@Html.EditorFor(model => model.User.telefon,@type = "text",@required = "required" } })
@Html.ValidationMessageFor(model => model.User.telefon,new { @class = "text-danger" })
</div>
</div>
<div class="form-group w-100">
<label class="form-control-label col-md-12">Bulunduğunuz il</label>
<select class="form-control col-md-12" name="city" id="il" required></select>
</div>
<div class="form-group w-100">
<label class="form-control-label col-md-12">Bulunduğunuz ilçe</label>
<select class="form-control col-md-12" name="district" id="ilce" disabled required>
<option>Bir İl Seçiniz</option>
</select>
</div>
<div class="form-group w-100">
<label class="form-control-label col-md-12">Posta kodunuz</label>
<div class="col-md-12">
@Html.EditorFor(model => model.Address.postaKodu,@type = "text" } })
@Html.ValidationMessageFor(model => model.Address.postaKodu,new { @class = "text-danger" })
</div>
</div>
<div class="form-group w-100">
<label class="form-control-label col-md-12">Açık adresiniz</label>
<div class="col-md-12">
@Html.EditorFor(model => model.Address.acikAdres,@required = "required" } })
@Html.ValidationMessageFor(model => model.Address.acikAdres,new { @class = "text-danger" })
</div>
</div>
<div class="form-group w-100">
<div class="col-md-offset-2 col-md-12">
<input type="submit" value="Kaydol" class="btn btn-success" />
</div>
</div>
</div>
}
<script src="https://code.jquery.com/jquery-3.5.1.min.js" integrity="sha256-9/aliU8dGd2tb6OSsuzixeV4y/faTqgFtohetphbbj0=" crossorigin="anonymous">
</script>
<script>
$(function () {
$.ajaxSetup({
type: "post",url: "/User/IlIlce",//controllerımda gidicek olan yerim
dataType: "json"
});
$.extend({
ilGetir: function () {
$.ajax({
//datamızı gönderiyoruz
data: { "tip": "ilGetir" },success: function (sonuc) {
//gelen sonucumuz kontrol ediyoruz ona göre selectimze append işlemi gerçekleştiyoruz
if (sonuc.ok) {
$.each(sonuc.text,function (index,item) {
var optionhtml = '<option value="' + item.Value + '">' + item.Text + '</option>';
$("#il").append(optionhtml);
});
} else {
$.each(sonuc.text,item) {
var optionhtml = '<option value="' + item.Value + '">' + item.Text + '</option>';
$("#il").append(optionhtml);
});
}
}
});
},ilceGetir: function (ilID) {
$.ajax({
//ekstra olarak functionumaza gelen ilID mizi gönderiyoruz
data: { "ilID": ilID,"tip": "ilceGetir" },success: function (sonuc) {
//bir önceki kayıtları temizliyorum
$("#ilce option").remove();
if (sonuc.ok) {
//disabled false yapıyorum
$("#ilce").prop("disabled",false);
$.each(sonuc.text,item) {
var optionhtml = '<option value="' + item.Value + '">' + item.Text + '</option>';
$("#ilce").append(optionhtml);
});
} else {
$.each(sonuc.text,item) {
var optionhtml = '<option value="' + item.Value + '">' + item.Text + '</option>';
$("#ilce").append(optionhtml);
});
}
}
});
}
});
//ilgetirimizi çalıştıyoruz
$.ilGetir();
//il selectimizde değişiklik olduğunda çalışacak func
$("#il").on("change",function () {
//seçili olan id alıyoruz
var ilID = $(this).val();
//seçili olan idmizi ilceGetir'imze gönderiyoruz
$.ilceGetir(ilID);
});
});
</script>
最后是我的用户模型:
public partial class tblKullanici
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage","CA2214:DoNotCalloverridableMethodsInConstructors")]
public tblKullanici()
{
this.tblBagis = new HashSet<tblBagis>();
this.tblAdres = new HashSet<tblAdres>();
this.tblSiparis = new HashSet<tblSiparis>();
}
public int kullaniciID { get; set; }
[required(ErrorMessage = "Kullanıcı adı girmeniz gerekmektedir!")]
[StringLength(30,MinimumLength = 6,ErrorMessage = "Kullanıcı adınız 6 ila 30 karakter arasında olmak zorundadır!")]
public string kullaniciAdi { get; set; }
[required(ErrorMessage = "Firma adı girmeniz gerekmektedir!")]
[StringLength(70,ErrorMessage = "Firma adınız en fazla 70 karakter olabilir!")]
public string firmaAdi { get; set; }
[required(AllowEmptyStrings = false,ErrorMessage = "Şifre girmeniz gerekmektedir!")]
[DataType(DataType.Password)]
[StringLength(35,ErrorMessage =("Şifreniz 6 ila 35 karakter arasında olmak zorundadır"))]
public string sifre { get; set; }
[NotMapped]
[required(ErrorMessage = "Bu alan gereklidir!")]
[Compare("sifre",ErrorMessage = "Şifreler uyuşmamaktadır!")]
public string sifreTekrar { get; set; }
[required(ErrorMessage = "E-mail girmeniz gerekmektedir!")]
[DataType(DataType.EmailAddress)]
[StringLength(70,ErrorMessage = "E-mail en fazla 70 karaktere sahip olabilir!")]
public string mail { get; set; }
[required(ErrorMessage = "Telefon numarası girmeniz gerekmektedir!")]
[MaxLength(16,ErrorMessage = "Telefon numaranız en fazla 16 haneli olabilir!")]
public string telefon { get; set; }
public System.DateTime olusturulmaTarihi { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage","CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<tblBagis> tblBagis { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage","CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<tblAdres> tblAdres { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage","CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<tblSiparis> tblSiparis { get; set; }
}
区(ilce)模型:
public partial class tblİlce
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage","CA2214:DoNotCalloverridableMethodsInConstructors")]
public tblİlce()
{
this.tblAdres = new HashSet<tblAdres>();
}
public int ilceID { get; set; }
public string ilceAdi { get; set; }
public int bagliOlduguSehirID { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage","CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<tblAdres> tblAdres { get; set; }
}
城市(sehir)模型:
public partial class tblSehir
{
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage","CA2214:DoNotCalloverridableMethodsInConstructors")]
public tblSehir()
{
this.tblAdres = new HashSet<tblAdres>();
}
public int sehirID { get; set; }
public string sehirAdi { get; set; }
[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage","CA2227:CollectionPropertiesShouldBeReadOnly")]
public virtual ICollection<tblAdres> tblAdres { get; set; }
}
注册操作:
[HttpPost]
public ActionResult Register(RegisterVM model)
{
tblKullanici user = null;
tblAdres address = null;
if(model != null)
{
db = new DatabaseContext();
user = model.User;
address = model.Address;
db.tblKullanici.Add(user);
db.tblAdres.Add(address);
db.SaveChanges();
return RedirectToAction("Index","App");
}
ViewBag.Message = "Kayıt işlemi sırasında hata oluştu!";
return View(model);
}
感谢大家从现在开始提供的任何帮助..
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)