কেউ কি আমাকে বলতে পারেন যে আমি কীভাবে অ্যাকশন লিঙ্ক এবং পোস্ট পোস্ট ব্যবহার করে নিয়ন্ত্রণকারীর কাছে মান জমা দিতে পারি?
আমি বোতাম ব্যবহার করতে চাই না।
আমার ধারণা এটিতে jquery সহ কিছু আছে।
কেউ কি আমাকে বলতে পারেন যে আমি কীভাবে অ্যাকশন লিঙ্ক এবং পোস্ট পোস্ট ব্যবহার করে নিয়ন্ত্রণকারীর কাছে মান জমা দিতে পারি?
আমি বোতাম ব্যবহার করতে চাই না।
আমার ধারণা এটিতে jquery সহ কিছু আছে।
উত্তর:
আপনি একটি ব্যবহার করতে পারবেন না ActionLink
কারণ এটি কেবল একটি অ্যাঙ্কর <a>
ট্যাগ সরবরাহ করে।
আপনি একটি jQuery AJAX পোস্ট ব্যবহার করতে পারেন ।
অথবা কেবল jQuery (যা অ-আজেএক্স হবে না) ছাড়াই বা ফর্মের জমা দেওয়ার পদ্ধতিটি কল করুন, সম্ভবত onclick
যে কোনও নিয়ন্ত্রণই আপনার অভিনব লাগে event
আপনি যদি এএসপি এমভিসি 3 ব্যবহার করে থাকেন তবে আপনি একটি অ্যাজাক্স ব্যবহার করতে পারেন ction
jquery.unobtrusive-ajax.min.js
"। অন্যথায়, এটি ক্লিক করার সময় পোষ্টের পরিবর্তে জিইটি করা চালিয়ে যাবে। লিঙ্কটি তৈরি করার সিনট্যাক্সটি এমন হবে:@Ajax.ActionLink("Delete", "Delete", new { id = item.Id }, new AjaxOptions {HttpMethod = "POST"})
"data-ajax"="true, "data-ajax-url"=<your link> and "data-ajax-method"="Post"
। বিটিডব্লিউ, আমি এএসপি.নেট এমভিসি 3 ব্যবহার করছি
আপনি আপনার সমস্ত বোতামের জন্য একটি পোস্ট করতে jQuery ব্যবহার করতে পারেন। তাদের কেবল একই সিএসসি ক্লাসের নাম দিন।
"মিথ্যা ফেরত দিন" ব্যবহার করুন আপনার অনক্লিক জাভাস্ক্রিপ্ট ইভেন্ট শেষে পোস্টের পরে যদি আপনি কোনও সার্ভার সাইড RedirectToAction করতে চান অন্যথায় কেবল ভিউটি ফিরিয়ে দিন।
রেজার কোড
@using (Html.BeginForm())
{
@Html.HiddenFor(model => model.ID)
@Html.ActionLink("Save", "SaveAction", "MainController", null, new { @class = "saveButton", onclick = "return false;" })
}
JQuery কোড
$(document).ready(function () {
$('.saveButton').click(function () {
$(this).closest('form')[0].submit();
});
});
সি #
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult SaveAction(SaveViewModel model)
{
// Save code here...
return RedirectToAction("Index");
//return View(model);
}
@ কোডিংভিথস্পাইকের দ্বারা পোস্ট করা একটি পোস্টে একটি মন্তব্যের মধ্যে এটি লুকানো আছে বলেই এইডসের সঠিক উত্তর ছিল এটি পরিষ্কার করতে চেয়েছিল।
@Ajax.ActionLink("Delete", "Delete", new { id = item.ApkModelId }, new AjaxOptions { HttpMethod = "POST" })
এখানে একটি উত্তর ডিফল্ট এএসপি.নেট এমভিসি 5 প্রকল্পে বেক করা হয়েছিল আমি বিশ্বাস করি যে আমার স্টাইলিং লক্ষ্যগুলি ইউআইতে দুর্দান্তভাবে অর্জন করে। কিছু সমন্বিত ফর্মটিতে খাঁটি জাভাস্ক্রিপ্ট ব্যবহার করে ফর্ম জমা দিন।
@using (Html.BeginForm("Logout", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
<a href="javascript:document.getElementById('logoutForm').submit()">
<span>Sign out</span>
</a>
}
সম্পূর্ণরূপে প্রদর্শিত ব্যবহারের কেসটি কোনও ওয়েব অ্যাপ্লিকেশনটির নেভিগেশন বারে লগআউট ড্রপডাউন।
@using (Html.BeginForm("Logout", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-right" }))
{
@Html.AntiForgeryToken()
<div class="dropdown">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<span class="ma-nav-text ma-account-name">@User.Identity.Name</span>
<i class="material-icons md-36 text-inverse">person</i>
</button>
<ul class="dropdown-menu dropdown-menu-right ma-dropdown-tray">
<li>
<a href="javascript:document.getElementById('logoutForm').submit()">
<i class="material-icons">system_update_alt</i>
<span>Sign out</span>
</a>
</li>
</ul>
</div>
}
অ্যাকশনলিঙ্ক কখনও পোস্ট পোস্ট করবে না। এটি সর্বদা জিইটি অনুরোধটি ট্রিগার করে।
নিম্নলিখিত কলটি অ্যাকশন লিঙ্কটি ব্যবহার করুন:
<%= Html.ActionLink("Click Here" , "ActionName","ContorllerName" )%>
ফর্মের মান জমা দেওয়ার জন্য ব্যবহার করুন:
<% using (Html.BeginForm("CustomerSearchResults", "Customer"))
{ %>
<input type="text" id="Name" />
<input type="submit" class="dASButton" value="Submit" />
<% } %>
এটি গ্রাহক নিয়ন্ত্রক এবং গ্রাহক অনুসন্ধানের ফলাফলগুলি অ্যাকশনটিতে ডেটা জমা দেবে।
এই লিঙ্কটি Ajax.BeginForm এর মধ্যে ব্যবহার করুন
@Html.ActionLink(
"Save",
"SaveAction",
null,
null,
onclick = "$(this).parents('form').attr('action', $(this).attr('href'));$(this).parents('form').submit();return false;" })
;)
আমার এই সমস্যাটির সমাধানটি মোটামুটি সহজ। আমার একটি পৃষ্ঠা রয়েছে যা গ্রাহক একটিকে পুরো ইমেলের মাধ্যমে এবং অন্যটি আংশিকভাবে অনুসন্ধান করে, আংশিকভাবে তালিকাগুলি প্রদর্শন করে একটি তালিকা প্রদর্শন করে তালিকার একটি অ্যাকশন লিঙ্ক রয়েছে যা গেটবাইআইডি নামে একটি ক্রিয়াকলাপের দিকে নির্দেশ করে এবং আইডিতে পাস করে
GetByID নির্বাচিত গ্রাহকের জন্য ডেটা টানছে তারপরে ফেরত দেয়
return View("Index", model);
যা পোস্ট পদ্ধতি
এটি সমাধান করা আমার পক্ষে একটি কঠিন সমস্যা হয়ে দাঁড়িয়েছে। আমি কীভাবে রেজার এবং এইচটিএমএলগুলিতে একটি গতিশীল লিঙ্ক তৈরি করতে পারি যা কোনও ক্রিয়া পদ্ধতিতে কল করতে পারে এবং একটি নির্দিষ্ট ক্রিয়া পদ্ধতিতে কোনও মান বা মান পাস করতে পারে? আমি কাস্টম এইচটিএমএল সহায়ক সহ বেশ কয়েকটি বিকল্প বিবেচনা করেছি। আমি সবেমাত্র একটি সহজ এবং মার্জিত সমাধান নিয়ে এসেছি।
দৃশ্য
@model IEnumerable<MyMvcApp.Models.Product>
@using (Html.BeginForm()) {
<table>
<thead>
<tr>
<td>Name</td>
<td>Price</td>
<td>Quantity</td>
</tr>
</thead>
@foreach (Product p in Model.Products)
{
<tr>
<td><a href="@Url.Action("Edit", "Product", p)">@p.Name</a></td>
<td>@p.Price.ToString()</td>
<td>@p.Quantity.ToString()</td>
</tr>
}
</table>
}
কর্ম পদ্ধতি
public ViewResult Edit(Product prod)
{
ContextDB contextDB = new ContextDB();
Product product = contextDB.Products.Single(p => p.ProductID == prod.ProductId);
product = prod;
contextDB.SaveChanges();
return View("Edit");
}
এখানে মুল বক্তব্যটি হ'ল url.Aक्शनটি ক্রিয়াকলাপটি জিইটি বা পোষ্ট কিনা তা বিবেচনা করে না। এটি উভয় পদ্ধতিতে অ্যাক্সেস করবে। আপনি ব্যবহার করে ক্রিয়া পদ্ধতিতে আপনার ডেটা পাস করতে পারেন
@Url.Action(string actionName, string controllerName, object routeValues)
রুটভ্যালুজ অবজেক্ট। আমি এটি চেষ্টা করেছি এবং এটি কাজ করে। না, আপনি প্রযুক্তিগতভাবে কোনও পোস্ট করছেন না বা ফর্মটি জমা দিচ্ছেন না তবে যদি রুটভ্যালিউজ অবজেক্টটিতে আপনার ডেটা রয়েছে তবে তা কোনও পোস্ট বা প্রাপ্ত তা গুরুত্বপূর্ণ নয়। সঠিক পদ্ধতিটি নির্বাচন করতে আপনি কোনও বিশেষ ক্রিয়া পদ্ধতির স্বাক্ষর ব্যবহার করতে পারেন।
নিম্নলিখিত কোডগুলি ব্যবহার করে আমি একই সমস্যাটি করেছি:
@using (Html.BeginForm("Delete", "Admin"))
{
@Html.Hidden("ProductID", item.ProductID)
<input type="submit" value="Delete" />
}
সমস্যাটির জন্য এটিই আমার সমাধান। এটি 2 ক্রিয়া পদ্ধতি সহ নিয়ামক
public class FeedbackController : Controller
{
public ActionResult Index()
{
var feedbacks =dataFromSomeSource.getData;
return View(feedbacks);
}
[System.Web.Mvc.HttpDelete]
[System.Web.Mvc.Authorize(Roles = "admin")]
public ActionResult Delete([FromBody]int id)
{
return RedirectToAction("Index");
}
}
ভিউতে আমি নিম্নলিখিত স্ট্রাকচারটি রেন্ডার করি।
<html>
..
<script src="~/Scripts/bootbox.min.js"></script>
<script>
function confirmDelete(id) {
bootbox.confirm('@Resources.Resource.AreYouSure', function(result) {
if (result) {
document.getElementById('idField').value = id;
document.getElementById('myForm').submit();
}
}.bind(this));
}
</script>
@using (Html.BeginForm("Delete", "Feedback", FormMethod.Post, new { id = "myForm" }))
{
@Html.HttpMethodOverride(HttpVerbs.Delete)
@Html.Hidden("id",null,new{id="idField"})
foreach (var feedback in @Model)
{
if (User.Identity.IsAuthenticated && User.IsInRole("admin"))
{
@Html.ActionLink("Delete Item", "", new { id = @feedback.Id }, new { onClick = "confirmDelete("+feedback.Id+");return false;" })
}
}
...
</html>
রেজারের আগ্রহের বিষয় :
জাভাস্ক্রিপ্ট ফাংশন confirmDelete(id)
যা বলা হয় যখন যখন উত্পাদিত লিঙ্কটি @Html.ActionLink
ক্লিক করা হয়;
confirmDelete()
আইটেম ক্লিক করা হচ্ছে ফাংশন প্রয়োজনীয় আইডি। এই আইটেমটি onClick
হ্যান্ডলারটি থেকে পাস করা হয়েছে confirmDelete("+feedback.Id+");return false;
মনোযোগ দিন হ্যান্ডলারটি ডিফল্ট ক্রিয়াকলাপ রোধ করতে ভুল প্রত্যাবর্তন করে - যা টার্গেট করার অনুরোধ রইল। OnClick
বাটনগুলির ইভেন্টটি বিকল্প হিসাবে তালিকার সমস্ত বোতামের জন্য jQuery এর সাথে সংযুক্ত হতে পারে (সম্ভবত এটি আরও ভাল হবে, কারণ এটি HTML পৃষ্ঠায় কম পাঠ্য হবে এবং ডেটা data-
বৈশিষ্ট্যের মাধ্যমে পাস করা যেতে পারে )।
ফরম হয়েছে id=myForm
অনুক্রমে সেটা খুঁজে পেতে এ, confirmDelete()
।
ফরম অন্তর্ভুক্ত @Html.HttpMethodOverride(HttpVerbs.Delete)
অর্ডার ব্যবহার করতে আপনাকে অবশ্যই HttpDelete
ব্যবস্থা দিয়ে চিহ্নিত করা, ক্রিয়া HttpDeleteAttribute
।
জাতীয় ফাংশন আমি ব্যবহার কর্ম নিশ্চিতকরণ (বহিরাগত প্লাগইন সাহায্যে না, কিন্তু মান নিশ্চিত খুব কাজ করে জরিমানা। ব্যবহার করতে ভুলবেন না bind()
কল ব্যাক বা var that=this
(যাই হোক না কেন আপনি চান)।
ফর্মটির সাথে id='idField'
এবং একটি লুকানো উপাদান রয়েছে name='id'
। নিশ্চিতকরণের পরে ফর্মটি জমা দেওয়ার আগে ( result==true
), লুকানো উপাদানটির মান পাস হওয়া যুক্তির মান হিসাবে সেট করা হয় এবং ব্রাউজারটি নিয়ামকের কাছে ডেটা জমা দেয়:
ইউআরএল অনুরোধ :http://localhost:38874/Feedback/Delete
অনুরোধের পদ্ধতি : POST স্থিতি কোড: 302 পাওয়া গেছে
প্রতিক্রিয়া শিরোনাম
অবস্থান: / প্রতিক্রিয়া হোস্ট: লোকালহোস্ট: 38874 ফর্ম ডেটা এক্স-এইচটিটিপি-পদ্ধতি-ওভাররাইড: মোছা আইডি: 5
আপনি দেখতে পাচ্ছেন এটি এক্স-এইচটিটিপি-মেথড-ওভাররাইডের সাথে পোস্টের অনুরোধ: ডিডিএলটিইডি এবং ডেটাতে "আইডি: 5" এ সেট ডেটা। প্রতিক্রিয়াতে 302 কোড রয়েছে যা সূচক ক্রিয়ায় পুনর্নির্দেশ করে, এর মাধ্যমে আপনি মুছে ফেলার পরে আপনার পর্দা রিফ্রেশ করেন।
এটি এমভিসি নমুনা প্রকল্প থেকে নেওয়া হয়েছে
@if (ViewBag.ShowRemoveButton)
{
using (Html.BeginForm("RemoveLogin", "Manage"))
{
@Html.AntiForgeryToken()
<div>
@Html.Hidden("company_name", account)
@Html.Hidden("returnUrl", Model.returnUrl)
<input type="submit" class="btn btn-default" value="Remove" title="Remove your email address from @account" />
</div>
}
}
আমি বিশুদ্ধ থেকে বিশ্রামের নীতিগুলিকে বিশুদ্ধ থাকার এবং আপনার মোছার জন্য একটি এইচটিটিপি মুছা ব্যবহার করার পরামর্শ দেব। দুর্ভাগ্যক্রমে এইচটিএমএল স্পেক্সগুলিতে কেবল এইচটিটিপি গেট এবং পোস্ট রয়েছে। একটি ট্যাগ কেবল একটি HTTP পেতে পারে। একটি ফর্ম ট্যাগ হয় একটি HTTP গেট বা পোস্ট করতে পারে। সৌভাগ্যক্রমে আপনি যদি অজ্যাক্স ব্যবহার করেন তবে আপনি এইচটিটিপি মুছতে পারেন এবং এটিই আমার পরামর্শ। বিস্তারিত জানার জন্য নীচের পোস্টটি দেখুন: এইচটিটিপি মুছে ফেলে
P। পোষ্ট () কল করা এজ্যাক্স ভিত্তিক হিসাবে কাজ করবে না। সুতরাং এই উদ্দেশ্যে একটি সংকর পদ্ধতি ব্যবহার করা প্রয়োজন।
সমাধানটি আমার জন্য কাজ করছে যা নিম্নলিখিত।
পদক্ষেপগুলি: 1.আরএফের জন্য ইউআরএল তৈরি করুন যা ইউআরএল এবং প্যারামিটার সহ একটি পদ্ধতি কল করে Java. জাভাস্ক্রিপ্ট পদ্ধতি ব্যবহার করে সাধারণ পোস্টটি কল করুন
সমাধান:
.Cshtml এ:
<a href="javascript:(function(){$.postGo( '@Url.Action("View")', { 'id': @receipt.ReceiptId } );})()">View</a>
দ্রষ্টব্য: বেনামে পদ্ধতিটি (....) () এর মধ্যে মোড়ানো উচিত
(function() {
//code...
})();
postGo নীচে জাভাস্ক্রিপ্ট হিসাবে সংজ্ঞায়িত করা হয়। বিশ্রামগুলি সহজ ..
@ ইউআরএল.অ্যাকশন ("দেখুন") কলটির জন্য ইউআরএল তৈরি করে
id 'আইডি': @ রসিদ Rআরসিপটিআইডি object অবজেক্ট হিসাবে প্যারামিটার তৈরি করে যা পোস্টগো পদ্ধতিতে পিওএসটি ক্ষেত্রে রূপান্তরিত হয়। আপনার প্রয়োজন মতো এটি কোনও প্যারামিটার হতে পারে
জাভাস্ক্রিপ্টে:
(function ($) {
$.extend({
getGo: function (url, params) {
document.location = url + '?' + $.param(params);
},
postGo: function (url, params) {
var $form = $("<form>")
.attr("method", "post")
.attr("action", url);
$.each(params, function (name, value) {
$("<input type='hidden'>")
.attr("name", name)
.attr("value", value)
.appendTo($form);
});
$form.appendTo("body");
$form.submit();
}
});
})(jQuery);
রেফারেন্স ইউআরএলগুলি যা আমি পোস্টগোতে ব্যবহার করেছি
অ-অজ্যাক্স জিইউকিরি (প্লাগইন?) ব্যবহার করে জিইটি / পোস্ট করুন
jQuery.post()
আপনার কাস্টম ডেটা থাকলে কাজ করবে। আপনি যদি বিদ্যমান ফর্মটি পোস্ট করতে চান তবে এটি ব্যবহার করা সহজ ajaxSubmit()
।
এবং আপনাকে এই কোডটি ActionLink
নিজেই সেটআপ করতে হবে না , যেহেতু আপনি document.ready()
ইভেন্টটিতে লিঙ্ক হ্যান্ডলার সংযুক্ত করতে পারেন (যা যাইহোক পছন্দসই পদ্ধতি), উদাহরণস্বরূপ $(function(){ ... })
jQuery ট্রিক ব্যবহার করে।
এটি অনুসন্ধান (সূচীকরণ) পৃষ্ঠা থেকে ফলাফল পৃষ্ঠায় পোষ্ট করার প্রয়োজনীয়তা অর্জন করেছে। @ ভিটালির বিবরণ অনুসারে আমার ততটা প্রয়োজন ছিল না তবে এটি আমাকে সঠিক দিকে নির্দেশ করেছে। আমাকে যা করতে হয়েছিল তা হ'ল:
@using (Html.BeginForm("Result", "Search", FormMethod.Post)) {
<div class="row">
<div class="col-md-4">
<div class="field">Search Term:</div>
<input id="k" name="k" type="text" placeholder="Search" />
</div>
</div>
<br />
<div class="row">
<div class="col-md-12">
<button type="submit" class="btn btn-default">Search</button>
</div>
</div>
}
আমার নিয়ামকের নিম্নলিখিত স্বাক্ষর পদ্ধতি ছিল:
[HttpPost]
public async Task<ActionResult> Result(string k)