Правильный корневой путь для приложения asp.net (в dev и на сервере) - PullRequest
0 голосов
/ 20 мая 2011

В моей личной среде разработчика у меня есть приложение asp.net на его собственном ip (127.0.0.2), таким образом, root всегда "/"

На сервере это в приложении, которое приходиткак servername.com/appname/"

Я создаю гиперссылки на файлы в строках и не могу правильно разобрать имена файлов на сервере.Они предлагают "servername.com", но не часть имени приложения.

Что мне не хватает?

Я вызываю класс веб-помощника (показанный ниже), чтобы получить пути к меню:

public static string getOnsiteAdministratorMenu()
        {
            string syllabusSearchURL = "/admin/syllabus_Search.aspx";

            return "<ul id=\"nav\"><li><a href=\"EnrollmentLookup.aspx\">Enrollment Search</a></li>" +
            "<li><a href=\"OnsiteEnrollment_AddNew.aspx\">Enrollment Add</a></li>" +
            "<li><a href=\"ViewSingleDocument.aspx\">Document Search</a></li>" +
            "<li><a href=\"/Admin/SyllabusAdd.aspx\">Add Syllabus</a></li>" +
            "<li><a href=\"" + syllabusSearchURL + "\">Edit Syllabus</a></li>" +
            "<li><a href=\"Course_add.aspx\">Add Course</a></li>" +
            "<li><a href=\"Group_add.aspx\">Add Group</a></li>" +
            "<li><a href=\"GroupSearch.aspx\">Groups</a></li>" +
            "<li><a href=\"Admin/Admin_GradeChanges.aspx\">Audit Grade Changes</a></li></ul>";
        }

Ответы [ 3 ]

1 голос
/ 20 мая 2011

Все остальные ответы здесь верны, но я просто хотел кое-что добавить. Чтобы делать то, что они предлагают, и динамически возвращать содержимое HTML, вы можете использовать класс HtmlGenericContro. Затем вы должны добавить вложенные элементы управления внутри.

    HtmlGenericControl adminMenu = new HtmlGenericControl("ul");
    HtmlGenericControl liItem  = new HtmlGenericControl("li");
    HyperLink link = new HyperLink();

    link.NavigateUrl = "~EnrollmentLookup.aspx";
    liItem.Controls.Add(link);
    adminMenu.Controls.Add(liItem);

    StringBuilder sb = new StringBuilder();
    StringWriter tw = new StringWriter(sb);
    HtmlTextWriter hw = new HtmlTextWriter(tw);

    adminMenu.RenderControl(hw);
    return sb.ToString();

Хотя вам может быть даже лучше, если вы используете пользовательский элемент управления для определения вашего AdminMenu

0 голосов
/ 20 мая 2011

добавить это перед URL ResolveUrl("~");

0 голосов
/ 20 мая 2011

когда вы используете серверные элементы управления, вы можете использовать ~ для создания относительного пути, который всегда будет корректным (localhost и на сервере):

<asp:HyperLink id="hyperlink1" NavigateUrl="~/EnrollmentLookup.aspx"
              Text="Enrollment Search" runat="server"/>     

В случае, если вы хотите получить доступ к физическим устройствам с помощью System.IO, вы можете вызвать Server.MapPath

Server.MapPath("~/log/data.txt");

Если вам нужен абсолютный путь, вы можете использовать

VirtualPathUtility.ToAbsolute("~/EnrollmentLookup.aspx");

Но я бы предложил, чтобы вы использовали UserControl или asp: Repeaterгенерировать HTML.

...