Merhaba. MVC Projemde düzenleme kısmında bir validation problemim var. Date ve decimal alanlarında validation mesajı alıyorum. Tarih alanlarım (StartDate, EndDate) MM.dd.YYYY şeklinde formatı kabul ediyor modelde farklı şekilde tanımlamama rağmen. decimal alanlarm (UnitPrice1, UnitPrice2, UnitPrice3) ise virgül kabul etmiyor. PriceDetailViewModelim :

public class PriceDetailsViewModel
{
    public int sno { get; set; }

    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    [DisplayName("Başlangıç Tarihi")]
    public Nullable<System.DateTime> StartDate { get; set; }

    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
    [DisplayName("Bitiş Tarihi")]
    public Nullable<System.DateTime> EndDate { get; set; }

    [DisplayName("Tarife Başlık ID")]
    public Nullable<int> PriceHeaderId { get; set; }

    [DisplayName("Birim Fiyatı 1")]
    [DataType(DataType.Currency)]
    public Nullable<decimal> UnitPrice1 { get; set; }

    [DisplayName("Birim Fiyatı 2")]
    [DataType(DataType.Currency)]
    public Nullable<decimal> UnitPrice2 { get; set; }

    [DisplayName("Birim Fiyatı 3")]
    [DataType(DataType.Currency)]
    public Nullable<decimal> UnitPrice3 { get; set; }

    [DisplayName("Aktif Sahası")]
    public Boolean ActiveArea { get; set; }

    [DisplayName("Tarife Başlığı")]
    public virtual PriceHeader PriceHeader { get; set; }
}

View ise şu şekilde

@model OsosPlus2.UI.Areas.Admin.ViewModels.PriceDetailsViewModel

@{ ViewBag.Title = "PriceDetailEdit"; Layout = "~/Areas/Admin/Views/Shared/_LayoutAdmin.cshtml"; } <script lang="javascript" type="text/javascript"> $(document).ready(function() { $("#StartDate").datepicker(); $("#EndDate").datepicker(); });
</script>

Tarife Düzenle

@using (Html.BeginForm()) { @Html.ValidationSummary(true)

<fieldset>

    <div class="editor-field">
        @Html.HiddenFor(model => model.sno)
        @Html.HiddenFor(model => model.PriceHeaderId)
        @Html.ValidationMessageFor(model => model.sno)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.StartDate)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.StartDate)
        @Html.ValidationMessageFor(model => model.StartDate)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.EndDate)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.EndDate)
        @Html.ValidationMessageFor(model => model.EndDate)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.PriceHeader)
    </div>
    <div class="editor-field">
        @ViewBag.PriceHeader
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.UnitPrice1)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.UnitPrice1)
        @Html.ValidationMessageFor(model => model.UnitPrice1)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.UnitPrice2)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.UnitPrice2)
        @Html.ValidationMessageFor(model => model.UnitPrice2)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.UnitPrice3)
    </div>
    <div class="editor-field">
        @Html.EditorFor(model => model.UnitPrice3)
        @Html.ValidationMessageFor(model => model.UnitPrice3)
    </div>

    <div class="editor-label">
        @Html.LabelFor(model => model.ActiveArea)
    </div>
    <div class="editor-field">
        @Html.CheckBoxFor(model => model.ActiveArea)
        @Html.ValidationMessageFor(model => model.ActiveArea)
    </div>

    <p>
        <input type="submit" value="Kaydet" />
        @Html.ValidationSummary()
    </p>
</fieldset>

}

@Html.ActionLink("Listeye Geri Dön", "PriceDetailsList", new { priceheaderid = ViewBag.PriceHeaderId0 })

@section Scripts { @Scripts.Render("~/bundles/jqueryval") }

Controller Katmanım :

    public ActionResult PriceDetailEdit(int id = 0)
    {
        PriceDetails pricedetails = db.PriceDetails.Find(id);
        PriceDetailsViewModel _pricedetails = AutoMapper.Mapper.Map<PriceDetails, PriceDetailsViewModel>(pricedetails);
        if (_pricedetails == null)
        {
            return HttpNotFound();
        }
        ViewBag.PriceHeader = pricedetails.PriceHeader.Name.ToString();
        ViewBag.PriceHeaderId = new SelectList(db.PriceHeader, "sno", "Name", _pricedetails.PriceHeaderId);
        ViewBag.PriceHeaderId0 = _pricedetails.PriceHeaderId;
        return View(_pricedetails);

    }
    [HttpPost]
    public ActionResult PriceDetailEdit(PriceDetailsViewModel _pd)
    {
        if (ModelState.IsValid)
        {

            PriceDetails pd = AutoMapper.Mapper.Map<PriceDetailsViewModel, PriceDetails>(_pd);
            DateTime StartDate = Convert.ToDateTime(pd.StartDate);
            DateTime EndDate = Convert.ToDateTime(pd.EndDate);
            int sno = Convert.ToInt32(pd.sno);
            int priceheaderid = Convert.ToInt32(pd.PriceHeaderId);
            ViewBag.PriceHeaderId0 = priceheaderid;
            if (EndDate > StartDate)
            {
                var result = (from p in db.PriceDetails where p.sno != sno && ((p.StartDate <= StartDate && p.EndDate >= StartDate) || (p.StartDate <= EndDate && p.EndDate >= EndDate) || (p.StartDate >= StartDate && p.EndDate <= EndDate)) select p).ToList();
                //var result1 = from p in db.PriceDetails where p.PriceHeaderId == priceheaderid && (p.StartDate <= StartDate && p.EndDate > StartDate) select p;
                if (result.Count() == 0)
                {
                    db.Entry(pd).State = EntityState.Modified;
                    db.SaveChanges();
                    return RedirectToAction("PriceDetailsList", new { priceheaderid = pd.PriceHeaderId });
                }
                else
                {
                    ModelState.AddModelError("Warning", "Daha Önceki Kayıtlı Tarih Aralıklarında Kayıt Yapılamaz");

                }
            }
            else
            {
                ModelState.AddModelError("DateError", "Bitiş Tarihi Başlangıç Tarihinden Büyük Olmalıdır");

            }
        }
        ViewBag.PriceHeaderId = new SelectList(db.PriceHeader, "sno", "Name", _pd.PriceHeaderId);
        return View(_pd);

    }

Yardımcı olursanız sevinirim

soruldu: 03 Tem '13, 04:26

mustafaalkan64's gravatar image

mustafaalkan64
35181220
cevap kabul oranı: 0%

değiştirildi: 04 Ağu '13, 03:22

rahmanyazgan's gravatar image

rahmanyazgan ♦
4.4k83559

hatayı client mi yoksa server tarafında mi alıyorsun

(03 Tem '13, 13:45) thebighead thebighead's gravatar image

Kodları eklemek yerine jquery.validate.js dosyasını açıp bu satırları aşağıdaki şekilde düzenlersen sorun çözülür:

$.validator.methods.range = function (value, element, param) { var globalizedValue = value.replace(",", "."); return this.optional(element) || (globalizedValue >= param[0] && globalizedValue <= param[1]); }

$.validator.methods.number = function (value, element) { return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:[\s\.,]\d{3})+)(?:[\.,]\d+)?$/.test(value); }

Ayrıca her ihtimale karşı webconfig dosyanıza şunları ekleyin:

<globalization fileencoding="utf-8" requestencoding="utf-8" responseencoding="utf-8" culture="tr-TR" uiculture="tr-TR"/>
permanent link

cevaplandı: 03 Tem '13, 13:47

thebighead's gravatar image

thebighead
41336
cevap kabul oranı: 0%

değiştirildi: 04 Ağu '13, 03:21

rahmanyazgan's gravatar image

rahmanyazgan ♦
4.4k83559

hatayı client tarafında alıyorum. globalization satırını da yukarıdaki gibi düzenledim ama hala aynı hatayla karşılaştım. jquery.validate.js dosyasına da scriptleri ekledim değişen bi şey olmadı

(04 Tem '13, 01:06) mustafaalkan64 mustafaalkan64's gravatar image

Custom Number Format ile yapmayı denedinmi? Birde onunla denermisin, sanırım sorunun çözülecek.

MSDN - Custom Numeric Format Strings
Örnek Kullanım

permanent link

cevaplandı: 04 Tem '13, 05:06

O%C4%9Fuz%20%C3%87elikdemir's gravatar image

Oğuz Çelikdemir
2.0k52234
cevap kabul oranı: 13%

Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×81
×47
×5
×3
×1

Soruldu: 03 Tem '13, 04:26

Görüntüleme: 2,213 kez

Son güncelleme: 04 Ağu '13, 03:22

powered by BitNami OSQA