return correct data to mvc View - asp.net-mvc-4

Im trying to populate data in a view from an sql db. Im selecting all recipes from a specific counry...O.k...I also want to display the country name at the top of the view but im having problems returning the result to the view. Any ideas would be greatly appreciated...
Heres my code
#model IEnumerable<FoodB.recipeTbl>
<h2>************where i want to put the country title***************88</h2>
<table>
<tr>
<th>
#Html.DisplayNameFor(model => model.recipe_title)
</th>
<th>
#Html.DisplayNameFor(model => model.ingredients)
</th>
<th>
#Html.DisplayNameFor(model => model.country_id)
</th>
<th></th>
</tr>
#foreach (var item in Model) {
<tr>
<td>
#Html.DisplayFor(modelItem => item.recipe_title)
</td>
<td>
#Html.DisplayFor(modelItem => item.ingredients)
</td>
<td>
#Html.DisplayFor(modelItem => item.country_id)
</td>
<td>
#Html.ActionLink("Edit", "Edit", new { id=item.id }) |
#Html.ActionLink("Details", "Details", new { id=item.id }) |
#Html.ActionLink("Delete", "Delete", new { id=item.id })
</td>
</tr>
}
</table>
Here's my controller
public ActionResult Index(int id)
{
//select all recipes for country
var query = db.recipeTbls.Where(c => c.country_id == id);
//get country from country table*******how to return this***********
var ctry = db.countryTbls.Where(country => country.id == id);
return View(query);
}

Use SingleOrDefault instead of Where since you are looking for one entry only
public ActionResult Index(int id)
{
//select all recipes for country
var query = db.recipeTbls.SingleOrDefault(c => c.country_id == id);
//get country from country table*******how to return this***********
var ctry = db.countryTbls.SingleOrDefault(c => c.id == id);
ViewBag.Country = ctry;
return View(query);
}
View
<h1>ViewBag.Country </h1>

viewbag is a field that is dynamic. you can set it to whatever type you want. So on your controller
ViewBag.Country = ctry;
then in your view
<label>#ViewBag.Country</label>

You can use the ViewBag.
The controller
public ActionResult Index(int id)
{
//select all recipes for country
var query = db.recipeTbls.Where(c => c.country_id == id);
//get country from country table*******how to return this***********
var ctry = db.countryTbls.Where(country => country.id == id);
ViewBag.country = ctry.ToString();
return View(query);
}
The view
#model IEnumerable<FoodB.recipeTbl>
<h2>ViewBag.country</h2>
Hope it worked.

Related

ASP.NET Core how to display images from wwwroot/Photos

I have images in wwwroot/photos dir and I want to display the images in a table after adding a new item (animal), along other details from my database.
Here is the Index page, showing my data without images displaying-
All my images are in wwwroot/photos dir.
I've tried to print the value of PhotoUrl on Index View and saw that it get this path -
wwwroot\Photos\Cats\Leon.jpeg
So what is the right way show my images ?
here are the relevent parts of my code:
Storage Service-
public class StorageService : IStorageService
{
readonly IHostingEnvironment _hostingEnvironment;
public StorageService(IHostingEnvironment hostingEnvironment)
{
_hostingEnvironment = hostingEnvironment;
}
public string AbsolutePath => _hostingEnvironment.WebRootPath;
}
Image Service-
public class ImageService : IImageService
{
readonly IStorageService _storageService;
public ImageService(IStorageService storageService)
{
_storageService = storageService;
}
//puts Image folder on wwwroot
public string ImageDir => Path.Combine(_storageService.AbsolutePath, "Photos");
//puts the category name under Image folder
public string CategoryDir(string name) => Path.Combine(ImageDir, name);
public string GetFullImageUrl(Animal animal, IFormFile imageFile)
{
var fileName = $"{imageFile.FileName}";
return Path.Combine(CategoryDir(animal.Category.Name), fileName ?? "");
}
public Task EnsureDirCreated(Category category)
{
Directory.CreateDirectory(CategoryDir(category.Name));
return Task.CompletedTask;
}
public async Task<(bool,string)> UploadImage(IFormFile imageFile, Animal animal)
{
if (imageFile != null && imageFile.Length > 0)
{
var fileName = $"{imageFile.FileName}";
//create file path
var categoryPath = CategoryDir(animal.Category.Name);
await EnsureDirCreated(animal.Category);
string fullPath = Path.Combine(categoryPath, fileName);
using (var fileStream = new FileStream(fullPath, FileMode.Create))
{
await imageFile.CopyToAsync(fileStream);
}
return (true,fullPath);
}
return (false,String.Empty);
}
}
Animal Service-
public async Task<Animal> AddAnimalAsync(Animal animal, IFormFile image)
{
animal.Category = await _categoryService.GetAsync(animal.CategoryId);
var (isSuccess, imageName) = await _imageService.UploadImage(image, animal);
if (isSuccess)
{
animal.PhotoUrl= imageName;
_animalRepository.Add(animal);
return animal;
}
return null;
}
CreaeAnimal ViewModel-
public class CreateAnimalViewModel
{
public Animal Animal { get; set; }
public IFormFile Photo { get; set; }
}
Controllers-
public async Task<IActionResult> Index()
{
var petShopData = _animalService.GetAnimalWithCategoryAsync();
return View(await petShopData);
}
public async Task<IActionResult> CreateAnimal()
{
var categories = await _categoryService.GetAnimalCategory();
ViewBag.Categories = categories.Select(c => new SelectListItem(c.Name, c.CategoryId.ToString())).ToList();
return View();
}
[HttpPost]
public async Task<IActionResult> CreateAnimal([FromForm] CreateAnimalViewModel vm)
{
await _animalService.AddAnimalAsync(vm.Animal, vm.Photo);
return RedirectToAction("Index");
}
Index View-
#model IEnumerable<PetShop.Data.Models.Animal>
#{
ViewBag.Title = "Index";
}
<h1>Index</h1>
<p>
<a asp-action="CreateAnimal">Create New</a>
</p>
<table class="table">
<thead>
<tr>
<th>
#Html.DisplayNameFor(model => model.Name)
</th>
<th>
#Html.DisplayNameFor(model => model.BirthDate)
</th>
<th>
#Html.DisplayNameFor(model => model.Description)
</th>
<th>
#Html.DisplayNameFor(model => model.PhotoUrl)
</th>
<th>
#Html.DisplayNameFor(model => model.Category)
</th>
<th></th>
</tr>
</thead>
<tbody>
#foreach (var item in Model) {
<tr>
<td>
#Html.DisplayFor(modelItem => item.Name)
</td>
<td>
#Html.DisplayFor(modelItem => item.BirthDate)
</td>
<td>
#Html.DisplayFor(modelItem => item.Description)
</td>
<td>
#*#Html.DisplayFor(modelItem => item.PhotoUrl)*#
<img src="#item.PhotoUrl" alt="..." style="width:18rem"/>
</td>
<td>
#Html.DisplayFor(modelItem => item.Category.Name)
</td>
<td>
<a asp-action="Edit" asp-route-id="#item.AnimalId">Edit</a> |
<a asp-action="Details" asp-route-id="#item.AnimalId">Details</a> |
<a asp-action="Delete" asp-route-id="#item.AnimalId">Delete</a>
</td>
</tr>
}
</tbody>
</table>
add the codes in your startup class:
app.UseStaticFiles();
if you added the codes,you could try to view your pic and check if it exist as below:

Razor Page Cascade Datatables by Dropdown

i have a dropdown list and i want to reload the datatable once i change the dropdown please note that the Checkbox field postback the page as well to update the database below is the cs file and will post the cshtml after
public class IndexModel : PageModel
{
private readonly IpponAcademy.Models.IJAContext _context;
public List<SelectListItem> judokaGroupList { get; set; }
[BindProperty]
public Boolean IsAttend { get; set; }
public IList<tbl_Judoka> tbl_Judoka { get;set; }
public IndexModel(IpponAcademy.Models.IJAContext context)
{
_context = context;
}
public void OnGet(Guid? id)
{
var GroupList = _context.LK_Groups.ToList();
judokaGroupList = GroupList.Select(a =>
new SelectListItem
{
Value = a.Group_GUID.ToString(),
Text = a.Group_Name
}).OrderBy(t => t.Text).ToList();
if (id == null)
{
id = Guid.Parse("7F299B82-3397-40F2-8105-65AECB1BA2A8"); //Group A
}
tbl_Judoka = _context.tbl_Judokas.Where(c => c.tbl_Judoka_Groups.Any(o => o.Is_Active == true && o.Group_GUID == id)).Include(c => c.tbl_Judoka_Groups.Where(o => o.Is_Active == true && o.Group_GUID == id)).ToList();
}
public void OnGetJudoka(Guid? id)
{
var GroupList = _context.LK_Groups.ToList();
judokaGroupList = GroupList.Select(a =>
new SelectListItem
{
Value = a.Group_GUID.ToString(),
Text = a.Group_Name
}).OrderBy(t => t.Text).ToList();
if (id == null)
{
id = Guid.Parse("7F299B82-3397-40F2-8105-65AECB1BA2A8"); //Group A
}
tbl_Judoka = _context.tbl_Judokas.Where(c => c.tbl_Judoka_Groups.Any(o => o.Is_Active == true && o.Group_GUID == id)).Include(c => c.tbl_Judoka_Groups.Where(o => o.Is_Active == true && o.Group_GUID == id)).ToList();
}
}
below is the cshtml file, I'd appreciate finding a simple way to do refresh the datatable with the new selected field from the dropdown
#page
#model IpponAcademy.Pages.Attendance.IndexModel
#{
ViewData["Title"] = "Index";
Layout = "~/Pages/Shared/_Layout.cshtml";
}
<form method="post">
<div class="form-group">
<label class="control-label">Group</label>
<select id="ddlGroup" class="form-control" asp-items="Model.judokaGroupList"></select>
#*onchange="alert(#Model.judokaGroupList)"*#
</div>
<table id="taskDt" class="table table-striped table-bordered nowrap" style="width:100%">
<thead>
<tr>
<th>
Attended
</th>
<th>
Code
</th>
<th>
Image
</th>
<th>
Judoka
</th>
</tr>
</thead>
<tbody>
#foreach (var item in Model.tbl_Judoka)
{
var imagePath = #"UploadedFiles/" + item.J_Image;
<tr>
<td>
<input type="hidden" name="J_GUID" id="J_GUID" value="#item.J_GUID" />
<input asp-for="IsAttend" name="IsAttend" id="IsAttend" type="checkbox" onclick="this.form.submit()" />
</td>
<td>
#Html.DisplayFor(modelItem => item.J_Code)
</td>
<td align="center">
<img src="#imagePath" alt="Judoka" width="50" height="50" class="rounded-circle mr-1" onclick="return LoadDiv(this.src);" style="cursor: pointer" />
</td>
<td>
#Html.DisplayFor(modelItem => item.J_Name)
</td>
</tr>
}
</tbody>
</table>
</form>
#section scripts{
<script>
var table;
function LoadData() {
//alert('in');
table = $("#taskDt").DataTable({
paging: true,
responsive: true,
searching: true,
ordering: true,
order: [[1, "asc"]]
});
}
$(document).ready(function () {
LoadData();
})
$("#ddlGroup").change(function () {
alert('DDLGroup');
//table.ajax.url("/Attendance/Index?handler=GET&Id=" + $("#ddlGroup Option:Selected").val()).load();
window.location.href = '/Attendance/Index?handler=Judoka&Id=' + $("#ddlGroup Option:Selected").val();
});
</script>
}
I think using window.location.href has been a simple enough way to refresh the datatable.Just one thing you need to improve,OnGet and OnGetJudoka method are the same,why not using just one method.
Change:
$("#ddlGroup").change(function () {
window.location.href = '/Attendance/Index?handler=Judoka&Id=' + $("#ddlGroup Option:Selected").val();
});
To:
$("#ddlGroup").change(function () {
window.location.href = '/Attendance/Index?Id=' + $("#ddlGroup Option:Selected").val();
});
If you must use another way,you could use form.submit():
Note:Be sure add name="id",otherwise the parameter will not bind to the backend.
<form method="post" asp-page-handler="Judoka">
<div class="form-group">
<label class="control-label">Group</label>
<select id="ddlGroup" class="form-control" name="id" asp-items="Model.judokaGroupList"
onchange="this.form.submit()"></select>
</div>
</form>
Backend code:
Change:
public void OnGetJudoka(Guid? id)
To:
public void OnPostJudoka(Guid? id)
BTW,I also have a suggestion that you'd better maintain the selected value after postback :
public void OnGetJudoka(Guid? id)
{
var GroupList = _context.LK_Groups.ToList();
judokaGroupList = GroupList.Select(a =>
new SelectListItem
{
Value = a.Group_GUID.ToString(),
Text = a.Group_Name
}).OrderBy(t => t.Text).ToList();
//maintain the selected value after post back...
var selectedValue= judokaGroupList.Where(a => a.Value == id.ToString()).FirstOrDefault();
selectedValue.Selected = true;
//...
}

Search and filter in list ASP.NET MVC

I'm trying to implement search in my list but for some reason, it's not working. I used a jQuery script for searching - please guide me.
Here are my controller and my view:
public ActionResult Details(int S)
{
SLMEntitiesDB dbContext = new SLMEntitiesDB();
var VL = (from U in dbContext.Users
join P in dbContext.Products on U.PID equals P.PID
where P.PID == U.PID
select new UP()
{
UserO = U,
ProductO = P
}).Where(U => U.UserO.LID == S).ToList();
ViewBag.result = VL;
return View(ViewBag.result);
}
View
#model IEnumerable<SLMDemo0.Models.UP>
<input type="text" id="txtsearch" placeholder="Search"/>
<table class="table">
<tr>
<th>
#Html.DisplayNameFor(model => model.UserO.UserName)
</th>
<th>
#Html.DisplayNameFor(model => model.ProductO.PName)
</th>
</tr>
#foreach (var item in Model)
{
<tr>
<td>
#Html.DisplayFor(modelItem => item.UserO.UserName)
</td>
<td>
#Html.DisplayFor(modelItem => item.ProductO.PName)
</td>
<td>
#Html.ActionLink("Edit", "Edit", new { id = item.UserO.UID })
</table>
<script src="~/Scripts/jquery-3.3.1.min.js"></script>
<script>
$("txtsearch").on("keyup", function () {
var txtenter = $(this).val();
$("table tr").each(function (results) {
if (results !== 0) {
var id = $(this).find("td:nth-child(2)").text();
if (id.indexOf(txtenter) !== 0 && id.toLowerCase().indexOf(txtenter.toLowerCase()) < 0) {
$(this).hide();
}
else {
$(this).show(); } } }); }); </script>
There's no result from the code, I can view what's in the list but when you type anything in the search nothing is happening.
You have missed the # identifier in $("txtsearch")
Please use it with $("#txtsearch")
<script>
$("#txtsearch").on("keyup", function () {
var txtenter = $(this).val();
$("table tr").each(function (results) {
if (results !== 0) {
var id = $(this).find("td:nth-child(2)").text();
if (id.indexOf(txtenter) !== 0 && id.toLowerCase().indexOf(txtenter.toLowerCase()) < 0) {
$(this).hide();
}
else {
$(this).show(); } } }); }); </script>

Html.ActionLink do not pass parameter to another controller

In my index page I have A html.ActionLink like this:
<table>
<tr>
<td>
#Html.DisplayFor(modelItem => item.TestInstanceID)
</td>
<td>
#Html.ActionLink("Edit", "Edit", new { id=item.TestInstanceID }) |
#Html.ActionLink("Details", "Details", new { id=item.TestInstanceID }) |
#Html.ActionLink("Delete", "Delete", new { id=item.TestInstanceID })|
#Html.ActionLink("Select", "Create","StudentTestMark", new {id = item.TestInstanceID}, null)
</td>
</tr>
}
</table>
which will pass the TestInstanceID to StudentTestMark Controller Create Action.
but when I Run it. id is Null.
public ActionResult Create(int? id)
{
// Get TestInstance
var testInstance = tt.GetByID(id);
........
}
An exception of type 'System.NullReferenceException' occurred in SHub.dll but was not handled in user code
Can't figure out what is wrong here, Please help.

Paypal IPN and PDT in MVC 4.0

I beginner of MVC and i am trying to paypal payment process using the following link
http://www.arunrana.net/2012/01/paypal-integration-in-mvc3-and-razor.html
Please guide me
How to implement Paypal IPN and PDT
and how to get success and Transaction id from Paypal that i want to save in database
Thanks in Advance
"
public class CheckoutController : Controller
{
CartContext _CartCotext = new CartContext();
CartItemContext _CartItemContext = new CartItemContext();
Tbl_OrderContext _OrderContext = new Tbl_OrderContext();
OrderDetailContext _OrderDetailContext = new OrderDetailContext();
ProductContext _ProductContext = new ProductContext();
const string PromoCode = "FREE";
[HttpPost]
public ActionResult AddressAndPayment(CheckoutViewModel values)
{
var cart = ShoppingCart.GetCart(this.HttpContext);
var _CartItems = Session["CartItems"];
var list = (List<Cart>)Session["CartItems"];
values.CartItems = list;
var order = new CheckoutViewModel();
order.CartItems = list;
TryUpdateModel(order);
{
try
{
if (order.Tbl_Order == null)
{
return View(order);
}
else
{
order.Tbl_Order.Username = User.Identity.Name;
order.Tbl_Order.OrderDate = DateTime.Now;
order.Tbl_Order.CartTotal = order.CartTotal;
Session["carttotal"] = order.CartTotal;
order.Tbl_Order.Status = "Pending";
//Save Order
_OrderContext.OrderEntries.Add(order.Tbl_Order);
_OrderContext.SaveChanges();
//Process the order
string username = User.Identity.Name;
ShoppingCart obj = new ShoppingCart();
int i = obj.CreateOrder(order.Tbl_Order, order.CartItems, username);
//return RedirectToAction("Complete",
// new { id = order.Tbl_Order.OrderId });
return RedirectToAction("PosttoPaypalShow");
}
}
catch
{
//Invalid - redisplay with errors
return View(order);
}
}
}
[HttpGet]
public ActionResult PosttoPaypalShow()
{
SportsStore.Models.Paypal payPal = new Paypal();
payPal.cmd = "_xclick";
payPal.business = ConfigurationManager.AppSettings["BusinessAccount"];
bool useSendBox = Convert.ToBoolean(ConfigurationManager.AppSettings["useSendbox"]);
if (useSendBox)
{
ViewBag.actionURL = "https://www.sandbox.paypal.com/cgi-bin/webscr";
}
else
{
ViewBag.actionURL = "https://www.paypal.com/cgi-bin/webscr";
}
payPal.cancel_return = System.Configuration.ConfigurationManager.AppSettings["CancelUrl"];
payPal.#return = ConfigurationManager.AppSettings["ReturnURL"];
payPal.notify_url = ConfigurationManager.AppSettings["NotifyURL"];
payPal.currency_code = ConfigurationManager.AppSettings["currencycode"];
//payPal.item_Name = ProductName;
payPal.item_Name = "test1";
payPal.Descriptions = "tes2";
payPal.amount = String.Format("{0:0.##}", Session["carttotal"]); //Convert.ToString(Session["carttotal"].ToString("0.00"));
return View(payPal);
}
public ActionResult PaypalAddressAndPayment()
{
Tbl_Order order = new Tbl_Order();
var cart = ShoppingCart.GetCart(this.HttpContext);
// Set up the ViewModel
var viewModel = new CheckoutViewModel
{
CartItems = cart.GetCartItems(),
CartTotal = cart.GetTotal(),
Tbl_Order = order
};
Session["CartItems"] = viewModel.CartItems;
return View(viewModel);
//return View(order);
}
string GetPayPalResponse(Dictionary<string, string> formVals, bool useSandbox)
{
string paypalUrl = useSandbox ? "https://www.sandbox.paypal.com/cgi-bin/webscr"
: "https://www.paypal.com/cgi-bin/webscr";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(paypalUrl);
// Set values for the request back
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
byte[] param = Request.BinaryRead(Request.ContentLength);
string strRequest = Encoding.ASCII.GetString(param);
StringBuilder sb = new StringBuilder();
sb.Append(strRequest);
foreach (string key in formVals.Keys)
{
sb.AppendFormat("&{0}={1}", key, formVals[key]);
}
strRequest += sb.ToString();
req.ContentLength = strRequest.Length;
//for proxy
//WebProxy proxy = new WebProxy(new Uri("http://urlort#");
//req.Proxy = proxy;
//Send the request to PayPal and get the response
string response = "";
using (StreamWriter streamOut = new StreamWriter(req.GetRequestStream(), System.Text.Encoding.ASCII))
{
streamOut.Write(strRequest);
streamOut.Close();
using (StreamReader streamIn = new StreamReader(req.GetResponse().GetResponseStream()))
{
response = streamIn.ReadToEnd();
}
}
return response;
}
public ActionResult IPN()
{
var formVals = new Dictionary<string, string>();
formVals.Add("cmd", "_notify-validate");
string response = GetPayPalResponse(formVals, true);
if (response == "VERIFIED")
{
string transactionID = Request["txn_id"];
string sAmountPaid = Request["mc_gross"];
string orderID = Request["custom"];
string pay_Status = Request["payment_status"];
//_logger.Info("IPN Verified for order " + orderID);
//validate the order
Decimal amountPaid = 0;
Decimal.TryParse(sAmountPaid, out amountPaid);
//Order order = _orderService.GetOrder(new Guid(orderID));
Tbl_Order order = null;
//check the amount paid
if (AmountPaidIsValid(order, amountPaid))
{
Tbl_Order add = new Tbl_Order();
add.Username = User.Identity.Name;
//add.FirstName = Request["first_name"];
//add.LastName = Request["last_name"];
//add.Email = Request["payer_email"];
//add.Address = Request["address_street"];
//add.City = Request["address_city"];
//add.State = Request["address_state"];
//add.Country = Request["address_country"];
//add.PostalCode = Request["address_zip"];
add.TransactionId = transactionID;
add.Status = pay_Status;
add.CartTotal = Convert.ToDecimal(sAmountPaid);
//process it
try
{
_OrderContext.OrderEntries.Add(add);
_OrderContext.SaveChanges();
//_pipeline.AcceptPalPayment(order, transactionID, amountPaid);
//_logger.Info("IPN Order successfully transacted: " + orderID);
//return RedirectToAction("Receipt", "Order", new { id = order.ID });
}
catch
{
//HandleProcessingError(order, x);
return View();
}
}
else
{
//let fail - this is the IPN so there is no viewer
}
}
return View();
}
bool AmountPaidIsValid(Tbl_Order order, decimal amountPaid)
{
//pull the order
bool result = true;
if (order != null)
{
if (order.CartTotal > amountPaid)
{
//_logger.Warn("Invalid order amount to PDT/IPN: " + order.ID + "; Actual: " + amountPaid.ToString("C") + "; Should be: " + order.Total.ToString("C") + "user IP is " + Request.UserHostAddress);
result = false;
}
}
else
{
//_logger.Warn("Invalid order ID passed to PDT/IPN; user IP is " + Request.UserHostAddress);
}
return result;
}
}
public class Address
{
public string FirstName { set; get; }
public string LastName { set; get; }
public string Email { set; get; }
public string Street1 { set; get; }
public string City { set; get; }
public string StateOrProvince { set; get; }
public string Country { set; get; }
public string Zip { set; get; }
}"
and
following the web.config file configuration
<add key="BusinessAccount" value="anilcs_1361585097_biz#gmail.com" />
<add key="useSendbox" value="true" />
<add key="currencycode" value="USD" />
<add key="ReturnURL" value="http://localhost:49424/Checkout/IPN" />
<add key="CancelUrl" value="http://localhost:49424/SportsStore/CancelFromPaypal" />
<add key="NotifyURL" value="http://localhost:49424/SportsStore/NotifyFromPaypal" />
<!--test MarchnatAccountId-->
<add key =" MerchantAccountID" value="RCERFF5KTC784"/>
This is my cart
#model SportsStore.Models.Paypal
#{
Layout = null;
}
<html>
<head>
<title>Index</title>
<script src="#Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script>
</head>
</html>
<form id="frm" action="#ViewBag.Actionurl">
#Html.HiddenFor(Model => Model.cmd)
#Html.HiddenFor(Model => Model.business)
#Html.HiddenFor(Model => Model.no_shipping)
#Html.HiddenFor(Model => Model.#return)
#Html.HiddenFor(Model => Model.cancel_return)
#Html.HiddenFor(Model => Model.notify_url)
#Html.HiddenFor(Model => Model.currency_code)
#Html.HiddenFor(Model => Model.item_Name)
#Html.HiddenFor(Model => Model.amount)
</form>
<p style="text-align: center">
<h4>
Redirecting to Paypal</h4>
</p>
<script type="text/javascript" language="javascript">
$(this.document).ready(function () {
var frm = $("form");
frm.submit();
});
</script>
after that i will filled up the shipping details and my page redirect to paypal
{
#model SportsStore.Models.CheckoutViewModel
#{
ViewBag.Title = "Address And Payment";
}
<script src="#Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="#Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
#using (Html.BeginForm("AddressAndPayment", "Checkout"))
{
<table>
<thead>
<tr>
<th>
#Html.LabelFor(m => m.Tbl_Order.OrderId, "OrderId")
</th>
<td>
#Html.TextBoxFor(m => m.Tbl_Order.OrderId, new { disabled = "disabled", #readonly = "readonly" })
</td>
</tr>
<tr>
<th>
#Html.LabelFor(m => m.Tbl_Order.OrderDate, "OrderDate")
</th>
<td>
#Html.EditorFor(m => m.Tbl_Order.OrderDate, "OrderDate")
#Html.EditorFor(m => m.CartItems, "CartItems")
</td>
</tr>
<tr>
<th>
#Html.LabelFor(m => m.Tbl_Order.FirstName, "First Name")
</th>
<td>
#Html.EditorFor(m => m.Tbl_Order.FirstName, "First Name")
</td>
</tr>
<tr>
<th>
#Html.LabelFor(m => m.Tbl_Order.LastName, "Last Name")
</th>
<td>
#Html.EditorFor(m => m.Tbl_Order.LastName, "Last Name")
</td>
</tr>
<tr>
<th>
#Html.LabelFor(m => m.Tbl_Order.Address, "Address")
</th>
<td>
#Html.EditorFor(m => m.Tbl_Order.Address, "Address")
</td>
</tr>
<tr>
<th>
#Html.LabelFor(m => m.Tbl_Order.City, "City")
</th>
<td>
#Html.EditorFor(m => m.Tbl_Order.City, "City")
</td>
</tr>
<tr>
<th>
#Html.LabelFor(m => m.Tbl_Order.State, "State")
</th>
<td>
#Html.EditorFor(m => m.Tbl_Order.State, "State")
</td>
</tr>
<tr>
<th>
#Html.LabelFor(m => m.Tbl_Order.PostalCode, "PostalCode")
</th>
<td>
#Html.EditorFor(m => m.Tbl_Order.PostalCode, "PostalCode")
</td>
</tr>
<tr>
<th>
#Html.LabelFor(m => m.Tbl_Order.Country, "Country")
</th>
<td>
#Html.EditorFor(m => m.Tbl_Order.Country, "Country")
</td>
</tr>
<tr>
<th>
#Html.LabelFor(m => m.Tbl_Order.Phone, "Phone")
</th>
<td>
#Html.EditorFor(m => m.Tbl_Order.Phone, "Phone")
</td>
</tr>
<tr>
<th>
#Html.LabelFor(m => m.Tbl_Order.Email, "Email")
</th>
<td>
#Html.EditorFor(m => m.Tbl_Order.Email, "Email")
</td>
</tr>
<tr>
<th>
#Html.LabelFor(m => m.CartTotal, "Total")
</th>
<td>
#* #Html.EditorFor(m => m.CartTotal, "Total" ) *# #* #Html.TextBoxFor(m => m.CartTotal, new { disabled = "disabled", #readonly = "readonly" })*#
#* #Html.DisplayTextFor(m => m.CartTotal)*#
#Html.TextBoxFor(m => m.CartTotal, new { #readonly = "readonly" })
</td>
</tr>
<tr>
<td>
</td>
Continoue with paypal
<td>
</td>
</tr>
<tr>
<td>
#* #Html.ActionLink("Sure to payment", "PosttoPaypalShow", "Checkout")*#
<input type="submit" value="Submit" />
</td>
</tr>
</thead>
</table>
}
1 Question - this is proper way which i have done ?
2 Question - how to return custom value from Paypal
3 and also see the web.config file after the payment should i called the PIN ?
Please guide me ...... and how to do payment process
I was looking for information on this recently as well. There is sample code on the paypal site, but I find it quite terse and it is hard to put it into context in your application. The best that I could find is the video and sample by Rob Conery.
First, look at the video. It is called "ASP.NET MVC Storefront Part 1: Architectural Discussion and Overview". Currently it can be found here. Skip ahead to 15:21 to get to the paypal part.
Then download the source code. You are looking for 'ASP.NET MVC Storefront sample code which can currently be found here.
Once you have extracted the code, search for IPN() for IPN method and PDT() for PDT method.