مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

mojtaba.shayanfar

عضویت از 1394/08/07

خطای عدم شناسائی نام Actio متود

  • یکشنبه 1 آذر 1394
  • 22:45
تشکر میکنم

باسلام 

بنده مثال MyCMS کلاس را پیاده سازی کردم یه مشکل کوجکی داشتم :

در انتهای صفحه خبر پارشال ویوی مربوط به نظرات را صدا زدم به شکل زیر:

@Html.Action("NewsComment", "News", new { pageid = @Model.pageID })

و متود  مربوط به آن در کنترلر News به صورت زیر می باشد:

 

[Route("NewsComment/{pageid}")]
public ActionResult ShowComments(int pageid)
        {
            return PartialView(db.PageComments.Where(p => p.pageID == pageid).ToList());
        } 
 
در بخش RoutConfig دقیقا بین دو قطعه کد , کد زیر را اضافه کرده ام:
routes.MapMvcAttributeRoutes();
ولی در زمان لود صفحه خبر با پیغام خطای زیر مواجه می شوم
 
{"A public action method 'NewsComment' was not found on controller 'login.Controllers.NewsController'."}
 
ممنون از توجه شما 

پاسخ های این پرسش

تعداد پاسخ ها : 11 پاسخ
کاربر سایت

اصغر

عضویت از 1394/03/16

  • دوشنبه 2 آذر 1394
  • 02:08
سلام Helper که شما استفاده کردید با نام اکشن و کنترلر کار میکنه نه با route اون ، نکته بعدی اینکه وقتی شما با اکشن یک پارشیال ویو رو لود میکنید نیازی به routing ندارید ، routing برای اکشن هایی استفاده میشه که url زیادی دارند ، تا با استفاده از routing آدرس اون اکشن و صفحه user friendly تر بشه. بجایNewsComment در helper مربوطه ازShowComments استفاده کنید و route را برای این اکشن که پارشیال بر میگردونه حذف کنید.
کاربر سایت

mojtaba.shayanfar

عضویت از 1394/08/07

  • دوشنبه 2 آذر 1394
  • 21:54

باتشکر از راهنمائی ,

یه سوال دیگه برام پیش آمده و اینکه در مثالی که جناب مدائنی انجام دادن در زمان صدا زدن متود مربوط به نمایش نظرات :

@Html.Action("ShowComment")

هیچ اشاره ای به کد خبر نشده ولی خودش تشخیص میده که نظرات مربوط به کدام خبر را نشان بده , چطور این را تشخیص میده ؟!

با تشکر از وقتی که می گذارید

ارادتمند شایان فر

کاربر سایت

اصغر

عضویت از 1394/03/16

  • دوشنبه 2 آذر 1394
  • 22:40

کد را اگر قرار بدید که بتونیم روی کد صحبت کنیم بهتره.
نمونه کد اکشن را قرار بدید بی زحمت.

کاربر سایت

mojtaba.shayanfar

عضویت از 1394/08/07

  • چهارشنبه 4 آذر 1394
  • 16:51

public ActionResult ShowComment(int id)

{

        return PartialView(db.PageComments.Where(p => p.PageID == id).ToList());

}

كد اكشن .

باتشكر مجدد.

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • چهارشنبه 4 آذر 1394
  • 16:56

دوست عزیز id ورودی متد به صورت خودکار از پارامتر صفخه پر میشه

فقط شما باید در آدرسی دهی Rout جای PageID از ID استفاده کنید

کاربر سایت

mojtaba.shayanfar

عضویت از 1394/08/07

  • چهارشنبه 4 آذر 1394
  • 17:22

سلام مجدد

نام پارامتر ورودي را به id تغيير دادم ولي پيغام خطاي زير را دريافت مي كنم

The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.Web.Mvc.ActionResult ShowComments(Int32)' in 'login.Controllers.NewsController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
Parameter name: parameters

ممنون از توجه شما.

 

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • چهارشنبه 4 آذر 1394
  • 17:28

ورودی متد را نیز باید تغییر دهید

کاربر سایت

mojtaba.shayanfar

عضویت از 1394/08/07

  • چهارشنبه 4 آذر 1394
  • 17:29

سلام مشكل را فهميدم

توي Rote مربوط به Action متود نمايش خبر بجاي id نوشته بودم pageid:

يعني [Route("News/{pageid}")]

كه با تغييرش به

[Route("News/{id}")]

درست شد

ممنون

 

کاربر سایت

mojtaba.shayanfar

عضویت از 1394/08/07

  • چهارشنبه 4 آذر 1394
  • 17:32

يه مشكل ديگه !!

زماني كه ثبت نظر را صدا مي زنم تو قسمت جاوا خطاي مربوط به  Undefined دريافت مي كنم :

http://localhost:9639/News/SaveComment?pageID=1&Email=undefined&userName=undefined&Comment=undefined

 

کاربر سایت

ایمان مدائنی

عضویت از 1392/01/20

  • چهارشنبه 4 آذر 1394
  • 17:45

در جا نیز باید به صورت Rout عمل کنید

نمیتونید از QueryString استفاده کنید چون Routing استفاده کردید

کاربر سایت

mojtaba.shayanfar

عضویت از 1394/08/07

  • پنجشنبه 5 آذر 1394
  • 10:51

متوجه نمی شم !

فکر کنم من سوالم را درست مطرح نکردم

متود و فانکشن های جاوا را براتو می فرستم:

اکشن متود SaveComment:

 public ActionResult SaveComment(int pageID, string Email, string userName, string Comment)
        {
            pageComment Pcom = new pageComment();
            Pcom.pageID = pageID;
            Pcom.Email = Email;
            Pcom.Comment = Comment;
            Pcom.UserName = userName;
            Pcom.CreateDate = DateTime.Now;
            db.PageComments.Add(Pcom);

            db.SaveChanges();

            return PartialView("ShowComments", db.PageComments.Where(p => p.pageID == pageID));
        }

فانکشن جاوا برای ذخیره هم به صورت زیر نوشتم:

 <script>
          function CreateCom(id)
          {
              debugger;
              alert($('#Email').val);
              $.ajax(
                  {
                      url: "/News/SaveComment",
                      type: "Get",
                      data: { pageID: id, Email: $('#Email').val, userName: $('#UserName').val, Comment: $('#Comment').val }
                  }
                  ).done(function (result)
                  {
                      $('#listcomment').html(result);
                      $('#Email').val('');
                      $('#UserName').val('');
                      $('#Comment').val('');
                  });
          }
      </script>

پارشال ویوی ایچاد نظر هم بصورت زیر :

@model login.Models.pageComment


<div class="form-horizontal">
    <h4>ثبت نظر شما</h4>
    <hr />
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })


    <div class="form-group">
        @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
        </div>
    </div>
    
    <div class="form-group">
        @Html.LabelFor(model => model.UserName, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.UserName, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.UserName, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        @Html.LabelFor(model => model.Comment, htmlAttributes: new { @class = "control-label col-md-2" })
        <div class="col-md-10">
            @Html.EditorFor(model => model.Comment, new { htmlAttributes = new { @class = "form-control" } })
            @Html.ValidationMessageFor(model => model.Comment, "", new { @class = "text-danger" })
        </div>
    </div>

    <div class="form-group">
        <div class="col-md-offset-2 col-md-10">
            <input type="submit" value="Create" class="btn btn-default" onclick="CreateCom(@ViewBag.PageID)" />
        </div>
    </div>
</div>

زمانی که دکمه ذخیره را کلیک می کنم هیچ اتفاقی نمی افته وقتی با FireBug دیباگ می کنم در بخش کنسول خطا مربوط نشناختن آیتم های نظر مثل Email , UserName , Comment را می بینم :

http://localhost:9639/News/SaveComment?pageID=1&Email=undefined&userName=undefined&Comment=undefined


همه مراحل را مثل خودت.ن انجام دادم ولی نمی دونم چرا کار نمی کنه !!

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)