|
Personally I'd create one database and design it such that it can be used with multiple clients.
BTW you shouldn't put your email or mobile number on the net, you're just going to get spammers\scammers contacting you, you should edit your post to remove that info.
|
|
|
|
|
Hi,
I have the following Route Contex:
context.MapRoute(
"Space_default",
"Space/{Value}/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
And I would like to get {Value} in my controller in the following code:
public class OverviewController : Controller
{
string myValue = (int)RouteData.Values["Value"];
[CourseAccess(CourseId = myValue)]
public ActionResult Index(int CourseId)
{...
I was wondering how can I do that and use that value before my actions.
Thank you.
|
|
|
|
|
You can't use a field or local variable in an attribute. The attribute parameters and properties are compiled into your code, so they can't depend on runtime data.
You'll probably need to look at using a filter attribute: Understanding Action Filters (C#) | Microsoft Docs[^]
public sealed class CourseAccessAttribute : FilterAttribute, IAuthorizationFilter
{
public void OnAuthorization(AuthorizationContext filterContext)
{
int courseId = (int)filterContext.RouteData["Value"];
if (!HasAccessToCourse(filterContext, courseId))
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
private bool HasAccessToCourse(AuthorizationContext filterContext, int courseId)
{
...
}
}
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Nice! Thank you! 
|
|
|
|
|
Hi,
I am trying to call a Web Api method (/BSCSecurityAddressBookWeb/api/MultiJobChangeApi/Get) when a button clicked, it has to load a new page (MultiJobChange)
(from Employee page to MultiJobChange)
and in MultiJobChange.js file I have written code for calling the Web Api,
MultiJobChange.cshtml page is loading by calling its Controller using the call window.open('/BSCSecurityAddressBookWeb/MultiJobChange/', '_self', false);,
MultiJobChangeController Index method returns View, up loading of the cshtml page its working properly, but the call to /BSCSecurityAddressBookWeb/api/MultiJobChangeApi/Get is not going.
Can anybody please help me in this regards, I am new to MVC, I am able to move to the new Page or Controller from Employee Page as Employee Page (or Controller is starting one) but not able to call the Web Api method from there even though I am seeing all js files loaded in resources in browser debugger, but still the Web Api call is not making through. Any help would be every supportive thanks in advance.
My Code looks as below:
code in MultiJobChange.js file
MultiJobChange = {
loadMultiJobChange: function (employeeID) {
$.get("/BSCSecurityAddressBookWeb/api/MultiJobChangeApi/Get").then(function (data) {
<pre>
var list = $("#ddlEmployees");
var selectedValue = list.val();
list.empty();
$.each(data, function (index, userList) {
$("<option>").attr("value", userList.EmployeeID).text(applicationgroup.LastName).appendTo(list);
});
$("#btnClearList").click(function (event) {
$("#lbxEmployees").empty();
});
$("#btnRemoveEmployee").click(function (event) {
$("#lbxEmployees option:selected").remove();
});
}
};
code in Employee.js file
loadEmployee: function (employeeID) {
$.get("/BSCSecurityAddressBookWeb/api/EmployeeAPI/Get").then(function (data) {
var list = $("#ddlApplicationGroup");
var selectedValue = list.val();
list.empty();
$.each(data.ApplicationGroups, function (index, applicationgroup) {
$("<option>").attr("value", applicationgroup.ApplicationGroupID).text(applicationgroup.ApplicationGroupName).appendTo(list);
});
if ((selectedValue == null) || (selectedValue == undefined)) {
list.prepend("<option value='-1' selected='selected'>Select value</option>");
if ((list[0] != undefined) && (list[0] != null))
list[0].selectedIndex = 0;
}
else {
list.val(selectedValue);
}
var list = $("#ddlReportPack");
var selectedValue = list.val();
list.empty();
$.each(data.ReportPacks, function (index, reportpack) {
$("<option>").attr("value", reportpack.ReportPackID).text(reportpack.ReportPackName).appendTo(list);
});
if ((selectedValue == null) || (selectedValue == undefined)) {
list.prepend("<option value='-1' selected='selected'>Select value</option>");
if ((list[0] != undefined) && (list[0] != null))
list[0].selectedIndex = 0;
}
else {
list.val(selectedValue);
}
});
}
code in Layout.js file
$(function () {
$("#btnEmployee").click(function (event) {
Employee.loadEmployee();
window.open('/BSCSecurityAddressBookWeb/Employee/', '_self', false);
});
$("#btnMultiJobChange").click(function (event) {
MultiJobChange.loadMultiJobChange();
window.open('/BSCSecurityAddressBookWeb/MultiJobChange/', '_self', false);
});
});
Code in MultiJobChange/Index.js file
function LoadMultiJobChange() {
MultiJobChange.loadMultiJobChange();
};
$(function () {
LoadMultiJobChange();
});
Code in Employee/Index.js file
function LoadEmployee() {
Employee.loadEmployee();
};
$(function () {
LoadEmployee();
});
Controller methods:
public class MultiJobChangeApiController : ApiController
{
// GET: api/MultiJobChangeApi
public List<userlist> Get()
{
dynamic model = null;
using (AppDevSecEntities ctx = new AppDevSecEntities())
{
var temp = ctx.UserLists.AsNoTracking().OrderByDescending(x => x.LastName);
if (temp != null)
model = temp.ToList<userlist>();
}
return model;
}
}
public class MultiJobChangeController : Controller
{
// GET: MultiJobChange
public ActionResult Index()
{
using (AppDevSecEntities ctx = new AppDevSecEntities())
{
BSCCrystalReportsViewerEntities ctx2 = new BSCCrystalReportsViewerEntities();
}
return View();
}
}
Thanks,
Abdul Aleem
"There is already enough hatred in the world lets spread love, compassion and affection."
|
|
|
|
|
indian143 wrote:
window.open('...', '_self', false);
That line will replace the current page with the specified URL. Even if your AJAX request completed, the updates you make to your page when it completes would immediately be thrown away in order to load the new page.
You need to change your code to make the AJAX request and display the results when the new page is loaded. Or call the API from the server, and render the result in the view.
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Can you please help me what could I place there, because when called that controller with a get, its going into the controller but the cshtml page that supposed to load is not loading after the Controller call and staying with the same old cshtml page after the call, I didn't get what to do, hence opted for this solution. Can you please help me what can I do to Navigate properly and calling the WebApi methods as well from js files.
Thanks,
Abdul Aleem
"There is already enough hatred in the world lets spread love, compassion and affection."
|
|
|
|
|
Option 1:
You call the API, and then navigate to the new page when you've finished.
NB: Any changes you make to the current page when the AJAX call returns will be discarded.
loadEmployee: function (employeeID) {
return $.get("/BSCSecurityAddressBookWeb/api/EmployeeAPI/Get");
}
...
$("#btnEmployee").click(function (event) {
event.preventDefault();
Employee.loadEmployee().done(function(){
location.assign('/BSCSecurityAddressBookWeb/Employee/');
});
});
Option 2:
You navigate to the new page, and then call then API from that page.
$("#btnEmployee").click(function (event) {
event.preventDefault();
location.assign('/BSCSecurityAddressBookWeb/Employee/');
});
New page:
loadEmployee: function(employeeID){
$.get("/BSCSecurityAddressBookWeb/api/EmployeeAPI/Get").then(function(data){
...
});
}
...
$(function(){
Employee.loadEmployee();
});
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Thanks my friend it was really successful
Thanks,
Abdul Aleem
"There is already enough hatred in the world lets spread love, compassion and affection."
|
|
|
|
|
I would like to develop new project from scratch.
I would like to use ASP.NET MVC 5.0, EntityFramework and SQL Server.
Can anybody share some good approach for the same. I gone though some blogs but still I did not find perfect approach for the same. In lot of blogs I read that we need to use 3 layer/N layer architecture and use generic repository.
Can anybody please share their views what are the best practices for MVC / EntityFramework / SQL projects.
I am verymuch interested in creating new structure of project.
|
|
|
|
|
Google has lots of resources on these issues. And the answers to your question really depend on what you project is going to do.
|
|
|
|
|
Just suggestion try to start with only one or two views with small text on it and few Controllers. I have gone through your situation, right now little better but still learning. Once you get used to it, you will become perfect - go ahead buddy start putting small things, MVC looks difficult when you think, but once you start putting things together slowly it will become possible.
Thanks,
Abdul Aleem
"There is already enough hatred in the world lets spread love, compassion and affection."
|
|
|
|
|
Hi,
I am getting the error when trying to load data from the WebApi call,
{"Message":"An error has occurred.","ExceptionMessage":"The 'ObjectContent`1' type failed to serialize the response body for content type 'application/json; charset=utf-8'.",
"ExceptionType":"System.InvalidOperationException","StackTrace":null,"InnerException":{"Message":"An error has occurred.","ExceptionMessage":
"The operation cannot be completed because the DbContext has been disposed.","ExceptionType":"System.InvalidOperationException","StackTrace":"
at System.Data.Entity.Internal.LazyInternalContext.InitializeContext()\r\n at System.Data.Entity.Internal.Linq.InternalQuery`1.GetEnumerator()\r\n at
System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.IEnumerable.GetEnumerator()\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeList
(JsonWriter writer, IEnumerable values, JsonArrayContract contract, JsonProperty member, JsonContainerContract collectionContract, JsonProperty containerProperty)\r\n at
Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.SerializeValue(JsonWriter writer, Object value, JsonContract valueContract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerProperty)\r\n at Newtonsoft.Json.Serialization.JsonSerializerInternalWriter.Serialize(JsonWriter jsonWriter, Object value, Type objectType)\r\n at Newtonsoft.Json.JsonSerializer.SerializeInternal(JsonWriter jsonWriter, Object value, Type objectType)\r\n at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding)\r\n at System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, Encoding effectiveEncoding)\r\n at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(Type type, Object value, Stream writeStream, HttpContent content)\r\n at System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(Type type, Object value, Stream writeStream, HttpContent content, TransportContext transportContext, CancellationToken cancellationToken)\r\n--- End of stack trace from previous location where exception was thrown ---\r\n at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at System.Web.Http.WebHost.HttpControllerHandler.<WriteBufferedResponseContentAsync>d__1b.MoveNext()"}}
My code looks like:
public List<UserList> Get()
{
dynamic model = null;
using (AppDevSecEntities ctx = new AppDevSecEntities())
{
var temp = ctx.UserLists.OrderByDescending(x => x.LastName);
if (temp != null)
model = temp.ToList<UserList>();
}
return model;
}
Any help would be very helpful thanks in advance.
Thanks,
Abdul Aleem
"There is already enough hatred in the world lets spread love, compassion and affection."
|
|
|
|
|
It looks like your entity has a navigation property, which isn't being eagerly loaded. When the framework tries to serialize the object to JSON, the main entity tries to load the related entity using lazy-loading. This fails because the DbContext has been disposed.
Entity Framework Loading Related Entities[^]
There are several options to solve this:
1) Turn off lazy loading:
The navigation properties in the returned JSON will all be null .
public List<UserList> Get()
{
using (AppDevSecEntities ctx = new AppDevSecEntities())
{
ctx.Configuration.LazyLoadingEnabled = false;
return ctx.UserLists.AsNoTracking().OrderByDescending(x => x.LastName).ToList();
}
}
2) Eagerly load the navigation properties:
You'll need to load all of the navigation properties you need to return. You'll still want to turn off lazy-loading.
public List<UserList> Get()
{
using (AppDevSecEntities ctx = new AppDevSecEntities())
{
ctx.Configuration.LazyLoadingEnabled = false;
return ctx.UserLists.AsNoTracking().Include(x => x.YourNavigationProperty).OrderByDescending(x => x.LastName).ToList();
}
}
3) Return a data transfer object (DTO)
Create a specific class containing just the data you need to return. You can either map the entities by hand, or use something like AutoMapper[^] to do the mapping for you.
public List<UserListDto> Get()
{
using (AppDevSecEntities ctx = new AppDevSecEntities())
{
ctx.Configuration.LazyLoadingEnabled = false;
return ctx.UserLists.AsNoTracking().OrderByDescending(x => x.LastName).ProjectTo<UserListDto>().ToList();
}
}
4) Store the context at the controller level:
A new instance of the controller class is created to serve each request, so it's safe to store the context at the controller level. You'll need to override Dispose to clean it up.
public class YourController : ApiController
{
public YourController()
{
Context = new AppDevSecEntities();
}
private AppDevSecEntities Context { get; }
protected override void Dispose(bool disposing)
{
base.Dispose(disposing);
if (disposing) Context.Dispose();
}
public List<UserList> Get()
{
return Context.UserLists.AsNoTracking().OrderByDescending(x => x.LastName).ToList();
}
}
NB: Since you're not updating the entities, it's a good idea to use the AsNoTracking method[^] to load them without tracking.
Entity Framework No-Tracking Queries[^]
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
Your WebAPI is attempting to serialize the object returned by your method, but the navigation properties point to the database connection built by the disposed connection.
There are many, many ways to skin this. The easiest (to me) is to locate the relationships in the Model that you do not want passed along with the basic call and decorate them with [JsonIgnore]. After doing that you can explicitly include them with the LINQ .Include(). You MUST have a reference to System.Data.Entity to use the strongly-typed extension of this method.
For example:
public class FooBar
{
...
[JsonIgnore]
public virtual ICollection<Foo> Foos { get; set; }
public virtual ICollection<Bar> Bars { get; set; }
}
Now your Get:
using System.Data.Entity;
...
public IEnumerable<FooBar> Get()
{
using(var context = new MyDbContext()){
{
return context.FooBars.Include(x => x.Bars).ToArray();
}
}
This will have the API respond to requests with all FooBars, with all associated Bars and no Foos. It's important to note that this will also need to be done with any other related models, so if Bar has relationship properties, you'll need to configure them for serialization.
By the way, using dynamic in a context where a strong type or generic will suffice is bad juju; it invites trouble.
"There are three kinds of lies: lies, damned lies and statistics."
- Benjamin Disraeli
|
|
|
|
|
Hello again experts,
We have a RadioButtonList inside a Repeater control with two options, Yes or No.
We would like to force our users to choose a Yes or No before proceeding.
In other words, if a user clicks to submit or in our case, click the Next button to go to the next without selecting either Yes or No, an error needs to be raised letting the user know that s/he must select a Yes or No to continue.
The following code uses RequiredValidator control to handle this but it does not do anything.
Any ideas how to resolve this?
Purchased:<asp:radiobuttonlist ID="rblType" runat="server" ValidationGroup ="stype" RepeatDirection="Horizontal" TextAlign="Right" style="display:inline;">
<asp:ListItem Text="Yes" />
<asp:ListItem Text="No" />
</asp:RadioButtonList>
<asp:RequiredFieldValidator id="RequiredFieldValidator1"
ControlToValidate="rblType"
ErrorMessage="required"
ValidationGroup ="stype"
runat="server"/>
Thanks a lot in advance.
|
|
|
|
|
Have you added the validation group to the submit button?
<asp:Button ID="btnSubmit" Text="Submit" runat="server" ValidationGroup="stype" />
If you don't need validation groups then don't add them at all.
|
|
|
|
|
EXCELLENT CATCH!
This proves once again that two heads are better than one.
I simply neglected that.
Thanks soo much.
|
|
|
|
|
just read a article on web api core versioning from this url http://www.c-sharpcorner.com/article/asp-net-core-api-versioning-in-simple-words-update-1-2-0/
i have few question about
[ApiVersion("2.0")] and MapToApiVersion("2.0")
1) why we need to use two attribute for a controller and action called
[ApiVersion("2.0")] and MapToApiVersion("2.0").
if i use
[ApiVersion("2.0")] for controller then it should work for whole controller then why i need to decorate action with
MapToApiVersion("2.0")
2) why
[ApiVersion("1.0")] and [Route("api/v{version:apiVersion}/[controller]")]
needed to decorate controller for versioning ?
3) this attribute
MapToApiVersion("2.0") is used for action only and this [ApiVersion("1.0")] used for controller only ?
4)
[ApiVersion("2.0")] or MapToApiVersion("2.0") for versioning then how web api action url would look like ?
please guide me.
|
|
|
|
|
Greetings experts,
I have a Repeater control with radiobuttonlist:
<asp:Repeater ID="repeaterItems" runat="server"
Purchased:<asp:radiobuttonlist ID="rblPurchaseType" runat="server" RepeatDirection="Horizontal" TextAlign="Right" style="display:inline;">
<asp:ListItem Text="New" />
<asp:ListItem Text="Used" />
</asp:RadioButtonList>
</asp:Repeater>
Then I have some textbox controls inside a div. This div is outside the Repeater control:
<div id="purchaseNewUsed" runat="server">
<table border="0" width="100%">
<tr>
<td>
<tr>
<td>NAME:</td><td><div class="input text"> <asp:TextBox ID="txtPrevOnwerName" style="width:450px;" runat="server"></asp:TextBox></div></td>
</tr>
<tr>
<td>ADDRESS:</td><td><div class="input text"> <asp:TextBox ID="TextBox6" style="width:450px;" runat="server"></asp:TextBox></div></td>
</tr>
<tr>
<td> CITY:</td><td><div class="input text"> <asp:TextBox ID="TextBox7" style="width:150px;" runat="server"></asp:TextBox></div></td><td> STATE:</td><td><div class="input select">
<asp:DropDownList ID="DropDownList2" runat="server" AppendDataBoundItems="True">
<asp:ListItem Value="" Selected="False"></asp:ListItem>
</asp:DropDownList>
</div></td><td> ZIP:</td><td><div class="input text"> <asp:TextBox ID="TextBox9" style="width:50px;" runat="server"></asp:TextBox></div></td>
</tr>
</table></div>
I understand about using wildcards when dealing with controls inside a Repeater.
My issue is the DIV is outside the Repeater control while the RadioButtonList is inside the Repeater control.
The following script is not enabling or disabling the DIV when Used option is selected.
Any ideas how to get this to work?
script type="text/javascript">
$(document).ready(function() {
$('#rblPurchaseType input').change(function () {
if ($(this).val() == "New") {
$("#purchaseNewUsed").prop("disabled", true);
}
else {
$("#purchaseNewUsed").prop("disabled", false);
}
});
});
</script>
Thanks in advance
|
|
|
|
|
First thing you need to appreciate is that jQuery runs on the client, it does not run from your aspx file, the aspx file is simply a guide to what html the client will eventually get. This code
$('#rblPurchaseType input').change(function () {
looks at any "input" element inside something with an id of rblPurchaseType. View the page source (what jQuery is running from), and do you see any elements with an id of rblPurchaseType?
The id you specify in your aspx page is *not* the id used in the html. You can either use fairly complex code to get the proper ids, or use a simpler way of identifying the elements you want.
<asp:Repeater ID="repeaterItems" runat="server">
<ItemTemplate>
Purchased:<asp:radiobuttonlist ID="rblPurchaseType" runat="server" RepeatDirection="Horizontal" TextAlign="Right" data-id="rblPurchaseType" style="display:inline;">
<asp:ListItem Text="New" />
<asp:ListItem Text="Used" />
</asp:RadioButtonList>
</ItemTemplate>
</asp:Repeater>
<script>
$(document).ready(function () {
$("[data-id='rblPurchaseType'] input").change(function () {
});
});
</script>
This code attaches a "data-id" attribute to the outer table that will wrap your components and that attribute is used rather than the element's id. You are going to have a similar problem with your purchaseNewUsed div.
|
|
|
|
|
Assuming you want the controls enabled if any item from the repeater has "used" selected, something like this should work:
$(document).on("click", "input:radio[name$='rblPurchaseType']", function(){
var selectedItems = $("input:radio[name$='rblPurchaseType'][value='Used']:checked");
$("#purchaseNewUsed").prop("disabled", selectedItems.length === 0);
});
"These people looked deep within my soul and assigned me a number based on the order in which I joined."
- Homer
|
|
|
|
|
F-ES Sitecore,
Well explained. I appreciate it very much.
I did try your solution though but it didn't work. Maybe, I did something wrong.
Richard, as usual, your code worked like a charm.
Thank you very much.
|
|
|
|
|
Until now I used dreamweaver and asp and now I'm starting in Asp.Net with visual studio 2017. The design view is very bad, it does not look like anything to the actual view of the page in the browser. In Dreamweaver it usually seems quite, although sometimes not.
How can I work in Visual Studio if the view does not look like? How can you improve visualization?
|
|
|
|
|
I have a table in sql database and I am accessing that table through a model in MVC now if I add few more column and their data the table structure is getting disturbed on a browser. Does anyone have a solution for this?
|
|
|
|
|