Not meant as an answer to the question, but  MousePosition["Graphics3DBoxIntercepts"] will be the key piece one will need in a full answer. Possibly inside an EventHandler as in @Szabolcs's MathGroup post for moving a point on a 3D surface. 
(Please hold onto your votes till Szabolcs posts his own answer.)

fun[x_, y_] := x^2 + y^2;

DynamicModule[{f, b},
 EventHandler[
  Show[
   Plot3D[fun[x, y], {x, -1, 1}, {y, -1, 1}],
   Graphics3D[
    Dynamic @ Quiet @ 
      Check[
       Sphere[((f - b) t + f) /. 
         FindRoot[fun[#1, #2] == #3 &amp; @@ ((f - b) t + f), {t, 0}], .1],
       {}
      ]
   ],
   BoxRatios -&gt; {1, 1, 1}],
  {"MouseMoved" :&gt; ({f, b} = MousePosition["Graphics3DBoxIntercepts"])}
 ]
]


screenshot:



How can locators be added to the points on a 3D grid?
Currently I have a method that is loading a PDF into an HTML page. The PDF is dynamically created after retrieving data from the database. Now, what I would like to do, is before the view of the PDF is loaded, I'd like to show a page that lets the user know that the information is being loaded.

ActionParams:

@using (Html.BeginForm("PreLoaderView", "Report", FormMethod.Post, new {
    @target = "_blank"
}))


Controller:

public ActionResult PreLoaderView(TestViewModel viewModel) {
    return View(viewModel);
}

public ActionResult SolicitorActionReport_Load(TestViewModel viewModel) {
    var cultivationModel = new CultivationModel(viewModel, ConstituentRepository, CampaignRepository);
    var cultivationData = cultivationModel.GetCultivationActivityData();
    var reportParamModel = new List&lt;ReportParamModel&gt;
                                   {
                                       new ReportParamModel() {AgencyName = SelectedUserAgency.AgencyName, StartDate = viewModel.StartDate, EndDate = viewModel.EndDate}
                                   };
    return FileContentPdf("Constituent", "CultivationActivityManagement", cultivationData, reportParamModel, new List&lt;FundraisingAppealMassSummary&gt;(), new List&lt;FundraisingAppealPortfolioSummary&gt;());
    return Content(viewModel.SolicitorType);
}


PreLoaderView:

@model Report.SolicitorActionParamsViewModel

@{
    ViewBag.Title = "Cultivation Activity";
}
&lt;script type="text/javascript"&gt;
    $(function () {
        $.ajax({
            url: '@Url.Action("SolicitorActionReport_Load", "Report", @Model)',

            complete: function() {
                $('#progress').hide();
            },
            error: function() {
                alert('oops');
            }
    });
    });
&lt;/script&gt;

&lt;div align="center"&gt;
    &lt;img id="progress" src="~/Content/images/loading.GIF"&gt;
    &lt;div id="result"&gt;
        &lt;embed width="100%" height="800px" src="http://localhost/YP/Report/SolicitorActionReport_Load"type="application/pdf"&gt;
    &lt;/div&gt;
&lt;/div&gt;


So, from the PreLoaderView, I'd like to pass the @Model back to the controller for use with the SolicitorActionReport_Load(). Is this possible to do?
